In Bezug auf die ": Int" Angabe der zugrunde liegenden Art, wenn ich das sah, würde ich mich umsehen und sehen, ob sie alle ihre enums so delcare. Wenn ja, haben sie wahrscheinlich gerade so Enums zu schreiben gelernt (oder sie sind vielleicht ein hyper-expliziter Coder). Wenn jedoch nur diese Enumeration auf diese Weise deklariert wurde, versucht der Programmierer vielleicht etwas zu sagen (was vielleicht besser mit einem Kommentar gesagt wurde), dass es entscheidend ist, dass dieser einen int-Typ hat. Vielleicht wird es irgendwo binär serialisiert oder deserialisiert.
Wie für die [Flags] -Attribut, so weit wie C# betrifft, so können Sie bitweise Operatoren auf jeder ENUM nutzen, nicht nur diejenigen mit [Flags] erklärt. Von Ihrem obigen Beispiel ohne [Flags] ist die folgende völlig legal:
abc myAbcValue = value1 | Wert2;
Der Hauptunterschied in Bezug auf die [Flags] ist in den ToString() - und Parse() - Methoden von Enum. Ohne [Flags] gibt myAbvValue.ToString() "3" zurück, aber mit [Flags] gibt es "value1, value2" zurück. Ebenso mit den [Flags],
abc IhrAbcValue = (abc) Enum.Parse (typeof (abc), "Wert1, Wert2");
wird den zugrunde liegenden Wert von yourAbcValue bis 3.
Hinweis eingestellt, dass die IsDefined() -Methode von Enum() erlaubt es nicht für mehrere Werte mit [Flags] Aufzählungen, so:
Enum.IsDefined (typeof (abc), "value1, value2")
gibt false zurück, unabhängig von der Verwendung von [Flags].
Beachten Sie auch, dass [Flags] Informationen für jede Reflexion Zugang bietet und andere Sprachen kann die Beschränkung auf markierten Aufzählungen differntly zur normalen Aufzählungen behandeln.