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

enum Słowo kluczowe jest używane do deklarowania wyliczenia, odrębnego typu, który składa się z zestawu nazwanych stałych o nazwie Lista 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 najlepszym rozwiązaniem jest zdefiniowanie wyliczenia bezpośrednio w przestrzeni nazw, tak aby wszystkie klasy w przestrzeni nazw mogły uzyskać do nich dostęp z taką samą wygodą.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 Wyliczenie może być również zagnieżdżone w obrębie klasy lub struktury.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 kolejnego modułu wyliczającego 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 poniższym wyliczeniu Sat , 0 Mon Sun 1 is,isitakdalej2.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 mogą używać inicjatorów, aby 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 kolejność elementów jest wymuszana od 1 0zamiast.In this enumeration, the sequence of elements is forced to start from 1 instead of 0. Jednakże, w tym stała o wartości 0 jest zalecana.However, including a constant that has the value of 0 is recommended. Aby uzyskać więcej informacji, zobacz typywyliczeniowe.For more information, see Enumeration Types.

Każdy typ wyliczeniowy ma typ podstawowy, który może być dowolnym typem liczb całkowitych.Every enumeration type has an underlying type, which can be any integral numeric type. Typ char nie może być podstawowym typem wyliczenia.The char type cannot be an underlying type of an enum. Domyślny typ podstawowy elementów wyliczenia to int. Aby zadeklarować Wyliczenie innego typu całkowitego, takiego jak Byte, Użyj dwukropka po identyfikatorze, po którym następuje typ, 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};

Do zmiennej typu wyliczenia można przypisać dowolną wartość z zakresu typu bazowego; 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ść enum E domyślna jest wartością wygenerowaną 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łych znaków w nazwie.An enumerator cannot contain white space in its name.

Typ podstawowy określa, ile miejsca do magazynowania przydzielono dla każdego modułu wyliczającego.The underlying type specifies how much storage is allocated for each enumerator. Jednak jawne rzutowanie jest niezbędne do konwersji z enum typu na typ całkowity.However, an explicit cast is necessary to convert from enum type to an integral type. Na przykład Poniższa Sun instrukcja przypisuje moduł wyliczający do zmiennej typu int przy użyciu rzutowania do konwersji z enum na. intFor 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 do wyliczenia zawierającego elementy, które mogą być połączone z operacją bitową OR , atrybut enum ma wpływ na zachowanie, gdy jest używany w przypadku niektórych narzędzi.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. Te zmiany można zauważyć przy użyciu narzędzi, takich jak Console metody klasy i ewaluatora wyrażeń.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.)

Niezawodne programowanieRobust programming

Podobnie jak w przypadku każdej stałej, 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. Może to powodować problemy z wersjami, jak opisano w stałych.This can create potential versioning issues as described in Constants.

Przypisanie dodatkowych wartości do nowych wersji wyliczeń lub zmiana wartości elementów członkowskich wyliczenia w nowej wersji może spowodować problemy z zależnym kodem źródłowym.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 często są używane w instrukcjach Switch .Enum values often are used in switch statements. Jeśli do enum typu Dodano dodatkowe elementy, sekcja domyślna instrukcji switch może zostać nieoczekiwanie wybrana.If additional elements have been added to the enum type, the default section of the switch statement can be selected unexpectedly.

Jeśli inni deweloperzy używają kodu, należy podać wskazówki dotyczące sposobu reakcji ich kodu, jeśli nowe elementy są dodawane do dowolnego enum typu.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 jest zadeklarowane Wyliczenie Day.In the following example, an enumeration, Day, is declared. Dwa moduły wyliczające są jawnie konwertowane na liczbę całkowitą i są 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 typu podstawowego służy do deklarowania, enum którego składowe są typu. longIn the following example, the base-type option is used to declare an enum whose members are of type long. Należy zauważyć, że mimo że typ podstawowy wyliczenia to long, elementy członkowskie wyliczenia nadal muszą być jawnie konwertowane na typ long za pomocą 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 użycie i efekt System.FlagsAttribute atrybutu enum w 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

W przypadku usunięcia Flagstego przykładu zostaną wyświetlone 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