Výčet typů (Příručka programování C#)
Typ vyčíslení (nazývaná také výčet nebo enum) představuje efektivní způsob definování sady pojmenované nedílnou konstanty, které může být přiřazena proměnné.Například Předpokládejme, že máte definovat proměnné, jejichž hodnota představuje den v týdnu.Existuje pouze sedm smysluplné hodnot, které bude někdy ukládají této proměnné.Chcete-li definovat tyto hodnoty můžete použít typ výčtu, který je deklarován pomocí výčtu klíčové slovo.
enum Days { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday };
enum Months : byte { Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec };
Ve výchozím nastavení je základní typ prvku ve výčtu int.Jiný nedílnou číselný typ pomocí dvojtečky, můžete určit, jak je znázorněno v předchozím příkladu.Úplný seznam možných typů naleznete v tématu výčtu (C#-Reference).
Výhody použití výčtu namísto číselného typu jsou následující:
Jasně určit pro klientský kód hodnoty, které jsou platné pro proměnnou.
V Visual Studio, IntelliSense, seznamy definované hodnoty.
Pokud nezadáte hodnoty pro prvky v seznamu čítače výčtu, jsou hodnoty automaticky zvětší o 1.V předchozím příkladu Days.Sunday má hodnotu 0, Days.Monday má hodnotu 1 a tak dále.Při vytváření nového Days objektu, bude mít výchozí hodnotu Days.Sunday (0), pokud nepřiřadíte explicitně jeho hodnotu.Při vytváření výčtu vyberte výchozí hodnotu logičtější a přiřaďte jí hodnotu nula.Který způsobí všechny výčty mít výchozí hodnotu, pokud nejsou přiřazeny explicitně hodnotu při jejich vytváření.
Pokud proměnná meetingDay je typu Days, pak (bez explicitní cast) můžete pouze přiřadit jednu z hodnot definovanou Days.A pokud se změní den schůzky, můžete přiřadit novou hodnotu z Days na meetingDay:
Days meetingDay = Days.Monday;
//...
meetingDay = Days.Friday;
[!POZNÁMKA]
Je možné přiřadit jakékoli libovolné celé číslo do meetingDay.Například tento řádek kódu nevytvářejí Chyba: meetingDay = (Days) 42.Však by neučiníte protože implicitní očekává se, že proměnná výčet pouze kapacita jedna z hodnot výčtu definovány.Přiřadit libovolné hodnoty proměnné typu výčtu je vysoké riziko chyb.
Můžete přiřadit libovolné hodnoty prvků v seznamu čítač výčtu typu a můžete také použít vypočtených hodnot:
enum MachineState
{
PowerOff = 0,
Running = 5,
Sleeping = 10,
Hibernating = Sleeping + 5
}
Výčet typů jako bitové příznaky
Můžete typ vyčíslení definovat bitové příznaky, což umožňuje instanci výčtu typu ukládat libovolné kombinace hodnoty, které jsou definovány v seznamu čítače výčtu.(Samozřejmě některé kombinace nemusí být smysluplné nebo povoleno v kódu programu.)
Vytvořit bit příznaků enum použitím System.FlagsAttribute atribut a vhodně definování hodnoty tak, aby AND, OR, NOT a XOR bitové operace lze provádět na nich.Bit příznaků enum obsahovat pojmenované konstanta s hodnotou nula, která znamená "jsou nastaveny žádné příznaky." Udělení Příznak Hodnota nula Pokud neznamená "jsou nastaveny žádné příznaky".
V následujícím příkladu jinou verzi Days enum s názvem Days2, je definována.Days2má Flags atribut a každá hodnota je přiřazena další větší výkon 2.To umožňuje vytvořit Days2 proměnnou, jejíž hodnota je Days2.Tuesday a Days2.Thursday.
[Flags]
enum Days2
{
None = 0x0,
Sunday = 0x1,
Monday = 0x2,
Tuesday = 0x4,
Wednesday = 0x8,
Thursday = 0x10,
Friday = 0x20,
Saturday = 0x40
}
class MyClass
{
Days2 meetingDays = Days2.Tuesday | Days2.Thursday;
}
Chcete-li nastavit příznak výčtu, použijte bitové OR operátor, jak ukazuje následující příklad:
// Initialize with two flags using bitwise OR.
meetingDays = Days2.Tuesday | Days2.Thursday;
// Set an additional flag using bitwise OR.
meetingDays = meetingDays | Days2.Friday;
Console.WriteLine("Meeting days are {0}", meetingDays);
// Output: Meeting days are Tuesday, Thursday, Friday
// Remove a flag using bitwise XOR.
meetingDays = meetingDays ^ Days2.Tuesday;
Console.WriteLine("Meeting days are {0}", meetingDays);
// Output: Meeting days are Thursday, Friday
Chcete-li zjistit, zda je konkrétní příznak nastaven, použijte bitové AND operace, jak ukazuje následující příklad:
// Test value of flags using bitwise AND.
bool test = (meetingDays & Days2.Thursday) == Days2.Thursday;
Console.WriteLine("Thursday {0} a meeting day.", test == true ? "is" : "is not");
// Output: Thursday is a meeting day.
Další informace o tom, co je vzít v úvahu při definování typů výčet s System.FlagsAttribute atributu naleznete v tématu System.Enum.
Pomocí metody System.Enum objevování a manipulovat s nimi hodnoty výčtu
Všechny výčty jsou instance System.Enum typu.Nelze odvodit nové třídy z System.Enum, ale jeho metody slouží k zjištění informací o a manipulaci s hodnotami v instanci výčtu.
string s = Enum.GetName(typeof(Days), 4);
Console.WriteLine(s);
Console.WriteLine("The values of the Days Enum are:");
foreach (int i in Enum.GetValues(typeof(Days)))
Console.WriteLine(i);
Console.WriteLine("The names of the Days Enum are:");
foreach (string str in Enum.GetNames(typeof(Days)))
Console.WriteLine(str);
Další informace naleznete v tématu System.Enum.
Nová metoda pro výčet můžete vytvořit také pomocí metody rozšíření.Další informace naleznete v tématu Jak: vytvoření nové metody pro výčet (Příručka programování C#).
Kapitola hlavní knihy
Další informace o proměnných v začátek Visual C# 2010