Avatar ·

Was bedeutet das Attribut [Flags] für Enumerationen (enum) in C#?

Hallo zusammen! Ich habe gerade angefangen, C# zu lernen, und bin auf das Attribut `[Flags]` vor einer Enum-Deklaration gestoßen. Ich habe solchen Code in Beispielen gesehen, verstehe aber nicht, wofür es benötigt wird und wie man es richtig verwendet. \n\nNormale Enumerationen verstehe ich – sie definieren einfach benannte Konstanten:\n\n```csharp\nenum DayOfWeek\n{\n Monday = 1,\n Tuesday = 2,\n Wednesday = 3\n}\n```\n\nAber wenn ich so etwas sehe:\n\n```csharp\n[Flags]\nenum Permissions\n{\n None = 0,\n Read = 1,\n Write = 2,\n Execute = 4\n}\n```\n\nVerstehe ich nicht, warum hier `[Flags]` steht und warum die Werte als Zweierpotenzen (1, 2, 4) festgelegt sind. Was ist der Unterschied zu einer normalen Enumeration? Ich habe versucht, eine solche Enumeration ohne das Attribut zu verwenden – der Code scheint zu funktionieren, aber ich habe das Gefühl, etwas falsch zu machen. \n\nKönnt ihr es an einfachen Beispielen erklären: wie deklariert man, wie kombiniert man Werte, wie prüft man das Vorhandensein eines Flags? Und vor allem – was ändert sich, wenn man `[Flags]` weglässt?\n\nVielen Dank im Voraus für die Hilfe!