Enum

Aus Das Sopra Wiki
Wechseln zu: Navigation, Suche

Mit Aufzählungen (in C#: enum) ist es möglich, mehrere konstante Werte zu gruppieren. Der Vorteil bei dieser Methode ist, dass die Konstanten in einem Datentyp gekapselt sind und somit als Klartext in einem Programm verwendet werden können.

Aufzählungen, oder enums werden folgendermaßen deklariert:

enum WeekDays
{
   Monday,
   Tuesday,
   Wednesday,
   Thursday,
   Friday,
   Saturday,
   Sunday
};

[...]

WeekDays day = WeekDays.Monday;

if (day == WeekDays.Tuesday)
   Console.WriteLine("It's Tuesday!");

Intern wird zu jedem Eintrag der Enumeration ein Integer-Wert abgespeichert, der auch abgefragt werden kann. Es ist jedoch auch möglich, diesen Wert selbst zu vergeben:

enum Preise
{
   Tomaten = 12,
   Brot = 10,
   Chili = 20,
   Eier = 4
};

Um im Programm alle Namen einer Enumeration zu ermitteln, kann die Klasse Enum verwendet werden:

string[] names;
names = Enum.GetNames(typeof(Preise));

for (int i = 0; i < names.Length; i++)
   Console.WriteLine(names[i] + ": " + (int)Enum.Parse(typeof(Preise), names[i]));


Bitfelder

Bitfelder sind eine besondere Art von Aufzählungen. Sie werden dann benutzt, wenn nicht nur eine Eigenschaft einer Aufzählung zutreffen kann, sondern mehrere Eigenschaften zutreffen. Die Definition eines Bitfeldes erfolgt am einfachsten über Attribute. Zum Beispiel können Dateien die Eigenschaften Archiv, Versteckt, Nur Lesen und System haben. Eine Datei kann mehrere dieser Eigenschaften (bei Betriebssystemen ebenfalls Attribute genannt) gleichzeitig annehmen. In C# erfolgt die Definition und der Test dieser Eigenschaften folgendermaßen:

[Flags()] // Hier wird das C#-Attribut "Flags()" verwendet
enum FileAttributes
{
   Archive = 0,
   Hidden = 1,
   Readonly = 2,
   System = 4,
   All = Archive | Hidden | Readonly | System
};

FileAttributes attrib = FileAttributes.Archive;
attrib = attrib | System; // Fügt neben Archiv auch das Attribut System hinzu

if ((attrib & FileAttributes.Hidden) = FileAttributes.Hidden)  // Testet, ob attrib das Attribut Hidden beinhaltet
   Console.WriteLine("The file is hidden!");

Intern ist der Aufbau der Enumeration dann folgendermaßen:

Archive  = 0000
Hidden   = 0001
Readonly = 0010
System   = 0100
All      = 0111

Beim Test wird bitweise mit Hilfe des &-Operators geprüft, ob eine bestimmte Eigenschaft vorhanden ist (siehe Beispiel).