enum (odwołanie w C#)

enum Słowo kluczowe jest używany do zadeklarować wyliczenia typu samodzielnego, która składa się z zestawem stałych o nazwie listy Moduł wyliczający.

Zazwyczaj najlepiej jest zdefiniowanie wyliczeniowego bezpośrednio w obszarze nazw, tak, aby wszystkie klasy w obszarze nazw można do niego dostęp z tanimi równe.Jednakże wyliczenia mogą być również zagnieżdżone wewnątrz klasy lub struktury.

Domyślnie pierwszy moduł wyliczający ma wartość 0, a wartość każdego z kolejnych modułu wyliczającego zwiększa się o 1.Na przykład, w następujących wyliczania Sat jest 0, Sun jest 1, Mon jest 2, itd.

enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri};

Moduły wyliczające można użyć inicjatorów do zastępowania wartości domyślnych, jak pokazano w poniższym przykładzie.

enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};

W to wyliczenie sekwencja elementów jest zmuszony do uruchamiania z 1 zamiast 0.Jednak zaleca się tym stała ma wartość 0.Aby uzyskać więcej informacji, zobacz Typy wyliczeniowe (Przewodnik programowania w języku C#).

Każdy typ wyliczeniowy ma typ podstawowy, który może być dowolnego typu integralną z wyjątkiem char.Domyślnie, odpowiedni typ wyliczenia elementów jest int.Aby zadeklarować wyliczeniowego innego typu integralną, takich jak bajt, używaj dwukropka po identyfikatora następuje typu, jak pokazano w poniższym przykładzie.

enum Days : byte {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};

The approved types for an enum are byte, sbyte, short, ushort, int, uint, long, or ulong.

Zmienna typu Days można przypisać dowolną wartość z zakresu podstawowej typu; wartości nie są ograniczone do nazwanego stałych.

Wartość domyślna, enum E jest wartością wyprodukowanych przez wyrażenie (E)0.

[!UWAGA]

Moduł wyliczający nie może zawierać odstępów w jego nazwę.

Typ podstawowy określa, ile pamięci zarezerwowanej dla każdego modułu wyliczającego.Jednakże jawne cast jest niezbędne do konwersji z enum typu typ integralny.Na przykład, następująca instrukcja przypisuje modułu wyliczającego Sun do zmiennej typu int za pomocą oddanych do konwersji z enum do int.

int x = (int)Days.Sun;

Po zastosowaniu FlagsAttribute do wyliczenia zawiera elementy, które mogą być połączone z bitowym OR operacji, atrybut wpływa na zachowanie enum gdy jest używany z niektórych narzędzi.Zmiany te można zauważyć podczas takich jak użyć narzędzia Console klasy, metody i oceniającego wyrażenie.(Zobacz przykład trzeci).

Stabilne Programowanie

Tak jak w przypadku wszelkich stała wszystkie odniesienia do poszczególnych wartości wyliczenia są konwertowane na stałe numeryczne w czasie kompilacji.Można utworzyć potencjalnych problemów versioning zgodnie z opisem w Stałe (Przewodnik programowania w języku C#).

Przypisywanie wartości dodatkowych do nowej wersji wyliczenia lub zmiana wartości członkowie wyliczenia w nowej wersji, mogą powodować problemy, dla kodu źródłowego zależnych.Wyliczenia wartości są często używane w Przełącz instrukcji.Jeśli dodatkowe elementy zostały dodane do enum typ, domyślną sekcję instrukcja switch można wybrać nieoczekiwanie.

Inni programiści użycie kodu, należy podać wskazówki dotyczące sposobu ich kodu powinny reagować Jeśli nowe elementy są dodawane do dowolnego enum typów.

Przykład

W poniższym przykładzie, wyliczenie, Days, jest zadeklarowany.Dwa moduły wyliczające jawnie są konwertowane na liczby całkowitej i przypisywać do zmiennych całkowitą.

public class EnumTest
{
    enum Days { Sun, Mon, Tue, Wed, Thu, Fri, Sat };

    static void Main()
    {
        int x = (int)Days.Sun;
        int y = (int)Days.Fri;
        Console.WriteLine("Sun = {0}", x);
        Console.WriteLine("Fri = {0}", y);
    }
}
/* Output:
   Sun = 0
   Fri = 5
*/

W poniższym przykładzie option base-type służy do zadeklarować enum których członkami są typu long.Warto zauważyć, że nawet jeśli typ podstawowy wyliczenia jest long, członkowie wyliczenia nadal muszą być wyraźnie konwertowane na wpisz long przy użyciu rzutu.

public class EnumTest2
{
    enum Range : long { Max = 2147483648L, Min = 255L };
    static void Main()
    {
        long x = (long)Range.Max;
        long y = (long)Range.Min;
        Console.WriteLine("Max = {0}", x);
        Console.WriteLine("Min = {0}", y);
    }
}
/* Output:
   Max = 2147483648
   Min = 255
*/

Poniższy przykład kodu ilustruje stosowanie i skutek FlagsAttribute atrybutu na enum deklaracji.

// Add the attribute Flags or FlagsAttribute.
[Flags]
public enum CarOptions
{
    // The flag for SunRoof is 0001.
    SunRoof = 0x01,
    // The flag for Spoiler is 0010.
    Spoiler = 0x02,
    // The flag for FogLights is 0100.
    FogLights = 0x04,
    // The flag for TintedWindows is 1000.
    TintedWindows = 0x08,
}

class FlagTest
{
    static void Main()
    {
        // The bitwise OR of 0001 and 0100 is 0101.
        CarOptions options = CarOptions.SunRoof | CarOptions.FogLights;

        // Because the Flags attribute is specified, Console.WriteLine displays 
        // the name of each enum element that corresponds to a flag that has 
        // the value 1 in variable options.
        Console.WriteLine(options);
        // The integer value of 0101 is 5.
        Console.WriteLine((int)options);
    }
}
/* Output:
   SunRoof, FogLights
   5
*/

Komentarze

Jeśli usuniesz Flags, przykład wyświetla następujące wartości:

5

5

Specyfikacja języka C#

Aby uzyskać więcej informacji, zobacz Specyfikacja języka C#. Specyfikacja języka jest ostatecznym źródłem informacji o składni i użyciu języka C#.

Zobacz też

Informacje

Słowa kluczowe języka C#

Tabela typów całkowitych (odwołanie w C#)

Tabela typów wbudowanych (odwołanie w C#)

Tabela niejawnych konwersji liczbowych (odwołanie w C#)

Tabela jawnych konwersji liczbowych (odwołanie w C#)

Koncepcje

Typy wyliczeniowe (Przewodnik programowania w języku C#)

Inne zasoby

Odwołanie w C#