Sabit listesi türleriC# (başvuru)Enumeration types (C# reference)

Sabit listesi türü (veya enum türü), temel alınan integral sayısal türünün adlandırılmış sabitler kümesi tarafından tanımlanan bir değer türüdür .An enumeration type (or enum type) is a value type defined by a set of named constants of the underlying integral numeric type. Bir sabit listesi türü tanımlamak için enum anahtar sözcüğünü kullanın ve enum üyelerininadlarını belirtin:To define an enumeration type, use the enum keyword and specify the names of enum members:

enum Season
{
    Spring,
    Summer,
    Autumn,
    Winter
}

Varsayılan olarak, sabit listesi üyelerinin ilişkili sabit değerleri inttüründedir. Bunlar sıfır ile başlar ve tanım metin sırasını izleyerek bir artış artar.By default, the associated constant values of enum members are of type int; they start with zero and increase by one following the definition text order. Bir numaralandırma türünün temel alınan türü olarak, diğer tüm integral sayısal türlerini açıkça belirtebilirsiniz.You can explicitly specify any other integral numeric type as an underlying type of an enumeration type. Ayrıca, aşağıdaki örnekte gösterildiği gibi, ilişkili sabit değerleri açıkça belirtebilirsiniz:You also can explicitly specify the associated constant values, as the following example shows:

enum ErrorCode : ushort
{
    None = 0,
    Unknown = 1,
    ConnectionLost = 100,
    OutlierReading = 200
}

Bir sabit listesi türünün tanımı içinde bir yöntem tanımlayamazsınız.You cannot define a method inside the definition of an enumeration type. Bir numaralandırma türüne işlevsellik eklemek için bir genişletme yöntemioluşturun.To add functionality to an enumeration type, create an extension method.

Bir sabit listesi E türünün varsayılan değeri, karşılık gelen enum üyesi olmasa bile, ifade (E)0tarafından üretilen değerdir.The default value of an enumeration type E is the value produced by expression (E)0, even if zero doesn't have the corresponding enum member.

Birbirini dışlayan bir veya seçenek birleşimi kümesinden seçim göstermek için bir numaralandırma türü kullanırsınız.You use an enumeration type to represent a choice from a set of mutually exclusive values or a combination of choices. Seçeneklerin bir birleşimini göstermek için, bir numaralandırma türünü bit bayrakları olarak tanımlayın.To represent a combination of choices, define an enumeration type as bit flags.

Bit bayrakları olarak numaralandırma türleriEnumeration types as bit flags

Bir sabit listesi türünün bir seçenek birleşimini göstermesini istiyorsanız, bu seçimler için, tek bir seçenek olan bir bit alanı olduğu gibi, numaralandırma üyelerini tanımlayın.If you want an enumeration type to represent a combination of choices, define enum members for those choices such that an individual choice is a bit field. Diğer bir deyişle, bu sabit listesi üyelerinin ilişkili değerleri ikinin üsleri olmalıdır.That is, the associated values of those enum members should be the powers of two. Ardından, sırasıyla seçenekleri veya seçimleri birleştirmek için bit düzeyinde mantıksal işleçler | veya & kullanabilirsiniz.Then, you can use the bitwise logical operators | or & to combine choices or intersect combinations of choices, respectively. Bir numaralandırma türünün bit alanları bildirdiğini belirtmek için, Flags özniteliğini buna uygulayın.To indicate that an enumeration type declares bit fields, apply the Flags attribute to it. Aşağıdaki örnekte gösterildiği gibi, bir numaralandırma türünün tanımına bazı tipik birleşimler da dahil edebilirsiniz.As the following example shows, you also can include some typical combinations in the definition of an enumeration type.

[Flags]
public enum Days
{
    None      = 0b_0000_0000,  // 0
    Monday    = 0b_0000_0001,  // 1
    Tuesday   = 0b_0000_0010,  // 2
    Wednesday = 0b_0000_0100,  // 4
    Thursday  = 0b_0000_1000,  // 8
    Friday    = 0b_0001_0000,  // 16
    Saturday  = 0b_0010_0000,  // 32
    Sunday    = 0b_0100_0000,  // 64
    Weekend   = Saturday | Sunday
}

public class FlagsEnumExample
{
    public static void Main()
    {
        Days meetingDays = Days.Monday | Days.Wednesday | Days.Friday;
        Console.WriteLine(meetingDays);
        // Output:
        // Monday, Wednesday, Friday

        Days workingFromHomeDays = Days.Thursday | Days.Friday;
        Console.WriteLine($"Join a meeting by phone on {meetingDays & workingFromHomeDays}");
        // Output:
        // Join a meeting by phone on Friday

        bool isMeetingOnTuesday = (meetingDays & Days.Tuesday) == Days.Tuesday;
        Console.WriteLine($"Is there a meeting on Tuesday: {isMeetingOnTuesday}");
        // Output:
        // Is there a meeting on Tuesday: False

        var a = (Days)37;
        Console.WriteLine(a);
        // Output:
        // Monday, Wednesday, Saturday
    }
}

Daha fazla bilgi ve örnek için, System.Enum API başvurusu sayfasının System.FlagsAttribute API başvurusu sayfasına ve dışlamalı olmayan üyelere ve Flags özniteliği bölümüne bakın.For more information and examples, see the System.FlagsAttribute API reference page and the Non-exclusive members and the Flags attribute section of the System.Enum API reference page.

System. Enum türü ve enum kısıtlamasıThe System.Enum type and enum constraint

System.Enum türü, tüm numaralandırma türlerinin soyut temel sınıfıdır.The System.Enum type is the abstract base class of all enumeration types. Bir numaralandırma türü ve değerleri hakkında bilgi almak için çeşitli yöntemler sağlar.It provides a number of methods to get information about an enumeration type and its values. Daha fazla bilgi ve örnek için bkz. System.Enum API başvurusu sayfası.For more information and examples, see the System.Enum API reference page.

7,3 ile C# başlayarak, bir tür parametresinin bir numaralandırma türü olduğunu belirtmek için temel sınıf kısıtlamasındaki System.Enum ( enum kısıtlamasıolarak bilinir) kullanabilirsiniz.Beginning with C# 7.3, you can use System.Enum in a base class constraint (that is known as the enum constraint) to specify that a type parameter is an enumeration type.

DönüşümlerConversions

Herhangi bir numaralandırma türü için, sabit listesi türü ve temel alınan integral türü arasında açık dönüştürmeler vardır.For any enumeration type, there exist explicit conversions between the enumeration type and its underlying integral type. Bir sabit listesi değerini temel alınan türüne çevirebilirsiniz , sonuç bir numaralandırma üyesinin ilişkili integral değeridir.If you cast an enum value to its underlying type, the result is the associated integral value of an enum member.

public enum Season
{
    Spring,
    Summer,
    Autumn,
    Winter
}

public class EnumConversionExample
{
    public static void Main()
    {
        Season a = Season.Autumn;
        Console.WriteLine($"Integral value of {a} is {(int)a}");  // output: Integral value of Autumn is 2

        var b = (Season)1;
        Console.WriteLine(b);  // output: Summer

        var c = (Season)4;
        Console.WriteLine(c);  // output: 4
    }
}

Bir sabit listesi türünün, ilişkili belirli değere sahip bir numaralandırma üyesi içerip içermediğini anlamak için Enum.IsDefined yöntemini kullanın.Use the Enum.IsDefined method to determine whether an enumeration type contains an enum member with the certain associated value.

Herhangi bir sabit listesi türü için, sırasıyla System.Enum türüne ve ' a kutulama ve kutudan çıkarma dönüştürmeleri mevcuttur.For any enumeration type, there exist boxing and unboxing conversions to and from the System.Enum type, respectively.

C# dili belirtimiC# language specification

Daha fazla bilgi için, C# dil belirtimininaşağıdaki bölümlerine bakın:For more information, see the following sections of the C# language specification:

Ayrıca bkz.See also