enum (odwołanie w C#)enum (C# Reference)

enum Słowo kluczowe jest używane do deklarowania wyliczania, typem samodzielnym, który zawiera zestaw nazwanych stałych zwanego listą modułów wyliczających.The enum keyword is used to declare an enumeration, a distinct type that consists of a set of named constants called the enumerator list.

Zazwyczaj najlepiej jest zdefiniowanie wyliczenia bezpośrednio w przestrzeni nazw, tak, aby wszystkie klasy w przestrzeni nazw do niego dostęp za pomocą równy wygody.Usually it is best to define an enum directly within a namespace so that all classes in the namespace can access it with equal convenience. Jednak wyliczenia może być zagnieżdżona w klasie lub strukturze.However, an enum can also be nested within a class or struct.

Domyślnie pierwszy moduł wyliczający ma wartość 0, a wartość każdego kolejnych moduł wyliczający jest zwiększana o 1.By default, the first enumerator has the value 0, and the value of each successive enumerator is increased by 1. Na przykład w następujących wyliczenia Sat jest 0, Sun jest 1, Mon jest 2, i tak dalej.For example, in the following enumeration, Sat is 0, Sun is 1, Mon is 2, and so forth.

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

Moduły wyliczające umożliwia inicjatory przesłonić wartości domyślne, jak pokazano w poniższym przykładzie.Enumerators can use initializers to override the default values, as shown in the following example.

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

W tym wyliczeniu sekwencję elementów jest zmuszony do uruchamiania z 1 zamiast 0.In this enumeration, the sequence of elements is forced to start from 1 instead of 0. Jednak zaleca się tym stałą, który ma wartość 0.However, including a constant that has the value of 0 is recommended. Aby uzyskać więcej informacji, zobacz Typy wyliczeniowe.For more information, see Enumeration Types.

Każdy typ wyliczenia ma podstawowy typ, który może być dowolnego typu całkowitoliczbowego z wyjątkiem char.Every enumeration type has an underlying type, which can be any integral type except char. Domyślny typ podstawowy wyliczenia elementów to int. Aby zadeklarować wyliczenie innego typu całkowitego, takich jak bajtów, użyj dwukropka po identyfikatorze, a następnie według typu, jak pokazano w poniższym przykładzie.The default underlying type of enumeration elements is int. To declare an enum of another integral type, such as byte, use a colon after the identifier followed by the type, as shown in the following example.

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

Zatwierdzone typy wyliczenia bajtów, sbyte, krótki, ushort, int, uint, długie, lub ulong.The approved types for an enum are byte, sbyte, short, ushort, int, uint, long, or ulong.

Zmienna typu wyliczeniowego można przypisać dowolną wartość z zakresu typu podstawowego; wartości nie są ograniczone do nazwanych stałych.A variable of an enumeration type can be assigned any value in the range of the underlying type; the values are not limited to the named constants.

Wartość domyślna enum E jest wartością produkowane przez wyrażenie (E)0.The default value of an enum E is the value produced by the expression (E)0.

Uwaga

Moduł wyliczający nie może zawierać biały znak w nazwie.An enumerator cannot contain white space in its name.

Podstawowy typ Określa, ile pamięci masowej jest przydzielany dla każdego typu wyliczeniowego.The underlying type specifies how much storage is allocated for each enumerator. Jednak jawnego rzutowania jest niezbędne do konwersji z enum typu na typ całkowitoliczbowy.However, an explicit cast is necessary to convert from enum type to an integral type. Na przykład następująca instrukcja przypisuje modułu wyliczającego Sun do zmiennej typu int przy użyciu rzutowanie do konwersji z enum do int.For example, the following statement assigns the enumerator Sun to a variable of the type int by using a cast to convert from enum to int.

int x = (int)Day.Sun;

Po zastosowaniu System.FlagsAttribute z wyliczeniem, który zawiera elementy, które mogą być łączone z bitową OR operacji, ten atrybut ma wpływ na zachowanie enum gdy jest używany z narzędziami.When you apply System.FlagsAttribute to an enumeration that contains elements that can be combined with a bitwise OR operation, the attribute affects the behavior of the enum when it is used with some tools. Można zauważyć te zmiany, korzystając z narzędzi takich jak Console klas, metod i ewaluatora wyrażenia.You can notice these changes when you use tools such as the Console class methods and the Expression Evaluator. (Zobacz trzeci przykład).(See the third example.)

Skuteczne programowanieRobust programming

Podobnie jak w przypadku dowolną stałą wszystkie odwołania do poszczególnych wartości wyliczenia są konwertowane na literały numeryczne w czasie kompilacji.Just as with any constant, all references to the individual values of an enum are converted to numeric literals at compile time. To utworzenie potencjalne problemy z wersjonowaniem, zgodnie z opisem w stałe.This can create potential versioning issues as described in Constants.

Przypisywanie dodatkowych wartości do nowych wersji wyliczenia lub zmiana wartości elementów członkowskich wyliczenia w nowej wersji, może powodować problemy, które kodu źródłowego zależnych.Assigning additional values to new versions of enums, or changing the values of the enum members in a new version, can cause problems for dependent source code. Wartości wyliczeniowe są często używane w Przełącz instrukcji.Enum values often are used in switch statements. Jeśli dodatkowe elementy zostały dodane do enum nieoczekiwanie można wybrać domyślną sekcję instrukcji switch typu.If additional elements have been added to the enum type, the default section of the switch statement can be selected unexpectedly.

Użycie kodu, inni deweloperzy dostarczają wytyczne dotyczące sposobu ich kod powinien reagować, jeśli nowe elementy są dodawane do dowolnej enum typów.If other developers use your code, you should provide guidelines about how their code should react if new elements are added to any enum types.

PrzykładExample

W poniższym przykładzie wyliczenie Day, jest zadeklarowana.In the following example, an enumeration, Day, is declared. Dwa moduły wyliczające są jawnie konwertowany na liczbę całkowitą i przypisane do zmiennych całkowitych.Two enumerators are explicitly converted to integer and assigned to integer variables.

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

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

PrzykładExample

W poniższym przykładzie opcja Typ podstawowy jest używane do deklarowania enum której członkami są typu long.In the following example, the base-type option is used to declare an enum whose members are of type long. Należy zauważyć, że nawet jeśli jest podstawowym typem wyliczenia long, elementy członkowskie wyliczenia nadal muszą być jawnie konwertowane na typ long przy użyciu rzutowania.Notice that even though the underlying type of the enumeration is long, the enumeration members still must be explicitly converted to type long by using a cast.

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
*/

PrzykładExample

Poniższy przykład kodu ilustruje stosowanie i efekt System.FlagsAttribute atrybutu na enum deklaracji.The following code example illustrates the use and effect of the System.FlagsAttribute attribute on an enum declaration.

// 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
*/

KomentarzeComments

Jeśli usuniesz Flags, w przykładzie są wyświetlane następujące wartości:If you remove Flags, the example displays the following values:

5

5

specyfikacja języka C#C# language specification

Aby uzyskać więcej informacji, zobacz Specyfikacja języka C#.For more information, see the C# Language Specification. Specyfikacja języka jest ostatecznym źródłem informacji o składni i użyciu języka C#.The language specification is the definitive source for C# syntax and usage.

Zobacz takżeSee also