enum (C# Başvurusu)enum (C# Reference)

enum anahtar sözcüğü, Numaralandırıcı listesi olarak adlandırılan bir adlandırılmış sabitler kümesinden oluşan ayrı bir tür olan bir sabit listesi bildirmek için kullanılır.The enum keyword is used to declare an enumeration, a distinct type that consists of a set of named constants called the enumerator list.

Genellikle, ad alanındaki tüm sınıfların eşit kolaylık olmadan erişebilmesi için doğrudan bir ad alanı içinde bir numaralandırma tanımlamanız en iyisidir.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. Ancak, bir numaralandırma bir sınıf veya yapı içinde de iç içe olabilir.However, an enum can also be nested within a class or struct.

Varsayılan olarak, ilk Numaralandırıcı 0 değerine sahiptir ve art arda her bir Numaralandırıcı değeri 1 artırılır.By default, the first enumerator has the value 0, and the value of each successive enumerator is increased by 1. Örneğin, aşağıdaki numaralandırmada Sat 0, Sun 1, Mon 2ve benzeri.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};

Numaralandırıcılar, aşağıdaki örnekte gösterildiği gibi varsayılan değerleri geçersiz kılmak için başlatıcıları kullanabilir.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};

Bu numaralandırmada, öğelerin sırası 0yerine 1 başlatmaya zorlanır.In this enumeration, the sequence of elements is forced to start from 1 instead of 0. Ancak, 0 değeri olan bir sabit kullanılması önerilir.However, including a constant that has the value of 0 is recommended. Daha fazla bilgi için bkz. numaralandırma türleri.For more information, see Enumeration Types.

Her numaralandırma türünün bir temel türü vardır ve bu her türlü integral sayısal türolabilir.Every enumeration type has an underlying type, which can be any integral numeric type. Char türü bir sabit listesinin temel alınan türü olamaz.The char type cannot be an underlying type of an enum. Enumeration öğelerinin temel alınan varsayılan türü int'tir. Bytegibi başka bir integral türünün bir sabit listesini bildirmek için, aşağıdaki örnekte gösterildiği gibi, tanımlayıcıdan sonra türün ardından bir iki nokta üst üste kullanın.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};

Sabit listesi türünün değişkenine, temel alınan türün aralığında herhangi bir değer atanabilir; değerler, adlandırılmış sabitler ile sınırlı değildir.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.

enum E varsayılan değeri, ifade (E)0tarafından üretilen değerdir.The default value of an enum E is the value produced by the expression (E)0.

Not

Numaralandırıcı, adında boşluk içeremez.An enumerator cannot contain white space in its name.

Temel alınan tür, her Numaralandırıcı için ne kadar depolama ayrılacağını belirtir.The underlying type specifies how much storage is allocated for each enumerator. Ancak, enum türünden integral türüne dönüştürmek için açık bir dönüştürme gerekir.However, an explicit cast is necessary to convert from enum type to an integral type. Örneğin, aşağıdaki ifade, enum int'e dönüştürmek için bir cast kullanarak, Numaralandırıcı Sun int türünde bir değişkene atar.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;

Bit düzeyinde OR işlemle birleştirilebilecek öğeleri içeren bir numaralandırmaya System.FlagsAttribute uyguladığınızda, öznitelik bazı araçlarla kullanıldığında enum davranışını etkiler.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. Console sınıfı yöntemleri ve Ifade Değerlendiricisi gibi araçları kullandığınızda bu değişiklikleri fark edebilirsiniz.You can notice these changes when you use tools such as the Console class methods and the Expression Evaluator. (Bkz. üçüncü örnek.)(See the third example.)

Güçlü programlamaRobust programming

Her türlü Sabitte olduğu gibi, bir numaralandırmanın tek tek değerlerine yapılan tüm başvurular, derleme zamanında sayısal değişmez değerlere dönüştürülür.Just as with any constant, all references to the individual values of an enum are converted to numeric literals at compile time. Bu, sabitlerbölümünde açıklandığı gibi olası sürüm oluşturma sorunları oluşturabilir.This can create potential versioning issues as described in Constants.

Yeni Numaralandırmaların yeni sürümlerine ek değerler atama veya yeni sürümde enum üyelerinin değerlerini değiştirme, bağımlı kaynak kodu sorunlarına neden olabilir.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. Numaralandırma değerleri genellikle Switch deyimlerinde kullanılır.Enum values often are used in switch statements. enum türüne ek öğeler eklendiyse, switch ifadesinin varsayılan bölümü beklenmedik şekilde seçilebilir.If additional elements have been added to the enum type, the default section of the switch statement can be selected unexpectedly.

Diğer geliştiriciler kodunuzu kullanıyorsa, yeni öğeler enum türlerine eklenirse kodun nasıl tepki vermesi hakkında yönergeler sağlamalısınız.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.

ÖrnekExample

Aşağıdaki örnekte, Daybir sabit listesi bildirilmiştir.In the following example, an enumeration, Day, is declared. İki Numaralandırıcı açıkça tam sayıya dönüştürülür ve tamsayı değişkenlerine atanır.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
*/

ÖrnekExample

Aşağıdaki örnekte, üyeleri longtüründe olan bir enum bildirmek için temel tür seçeneği kullanılır.In the following example, the base-type option is used to declare an enum whose members are of type long. Sabit listesinin temel alınan türü longolsa da, numaralandırma üyelerinin bir cast kullanılarak long türüne açıkça dönüştürülmesi gerekir.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
*/

ÖrnekExample

Aşağıdaki kod örneği, enum bildiriminde System.FlagsAttribute özniteliğinin kullanımını ve etkisini gösterir.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
*/

AçıklamalarComments

Flagskaldırırsanız, örnek aşağıdaki değerleri görüntüler:If you remove Flags, the example displays the following values:

5

5

C# dili belirtimiC# language specification

Daha fazla bilgi edinmek için, bkz. C# Dil Belirtimi.For more information, see the C# Language Specification. Dil belirtimi, C# sözdizimi ve kullanımı için kesin bir kaynaktır.The language specification is the definitive source for C# syntax and usage.

Ayrıca bkz.See also