Numaralandırma türleri (C# başvurusu)
Numaralandırma türü (veya numaralandırma türü), temel alınan tam sayı sayısal türünün adlandırılmış sabitleri kümesi tarafından tanımlanan bir değer türüdür. Bir numaralandırma türü tanımlamak için anahtar sözcüğünü enum
kullanın ve sabit listesi üyelerinin adlarını belirtin:
enum Season
{
Spring,
Summer,
Autumn,
Winter
}
Varsayılan olarak, sabit listesi üyelerinin ilişkili sabit değerleri türündedir int
; sıfırla başlar ve tanım metin sırasını izleyerek bir artar. Numaralandırma türünün temel alınan türü olarak diğer tüm integral sayısal türleri açıkça belirtebilirsiniz. Aşağıdaki örnekte gösterildiği gibi ilişkili sabit değerleri açıkça belirtebilirsiniz:
enum ErrorCode : ushort
{
None = 0,
Unknown = 1,
ConnectionLost = 100,
OutlierReading = 200
}
Bir numaralandırma türünün tanımı içinde bir yöntem tanımlayamazsınız. Numaralandırma türüne işlevsellik eklemek için bir uzantı yöntemi oluşturun.
Sabit listesi türünün E
varsayılan değeri, sıfırın karşılık gelen sabit listesi üyesi olmasa bile ifadesi (E)0
tarafından üretilen değerdir.
Numaralandırma türünü, birbirini dışlayan bir değer kümesinden veya seçim birleşiminden bir seçimi temsil etmek için kullanırsınız. Bir seçim bileşimini temsil etmek için bir numaralandırma türünü bit bayrakları olarak tanımlayın.
Numaralandırma türleri bit bayrakları olarak
Numaralandırma türünün bir seçim birleşimini temsil etmelerini istiyorsanız, bu seçenekler için tek bir seçimin bit alanı olması için numaralandırma üyeleri tanımlayın. Başka bir ifadeyle, bu sabit listesi üyelerinin ilişkili değerleri ikinin gücü olmalıdır. Ardından bit düzeyinde mantıksal işleçleri |
kullanabilir veya &
sırasıyla seçimleri birleştirebilir veya seçim birleşimlerini kesiştirebilirsiniz. Numaralandırma türünün bit alanları bildirdiğini belirtmek için, buna Flags özniteliğini uygulayın. Aşağıdaki örnekte gösterildiği gibi, numaralandırma türünün tanımına bazı tipik birleşimler de ekleyebilirsiniz.
[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 API başvuru sayfasına, Özel olmayan üyelere ve API başvuru sayfasının Flags özniteliği bölümüne System.Enum bakınSystem.FlagsAttribute.
System.Enum türü ve numaralandırma kısıtlaması
türü System.Enum , tüm numaralandırma türlerinin soyut temel sınıfıdır. Bir numaralandırma türü ve değerleri hakkında bilgi almak için bir dizi yöntem sağlar. Daha fazla bilgi ve örnek için API başvuru sayfasına bakın System.Enum .
Tür parametresinin bir numaralandırma türü olduğunu belirtmek için temel sınıf kısıtlamasında (numaralandırma kısıtlaması olarak bilinir) kullanabilirsinizSystem.Enum
. Herhangi bir numaralandırma türü, tür parametresinin struct
null atanamaz bir değer türü olduğunu belirtmek için kullanılan kısıtlamayı da karşılar.
Dönüşümler
Herhangi bir numaralandırma türü için, numaralandırma türü ile temel alınan tam sayı türü arasında açık dönüştürmeler vardır. Bir sabit listesi değerini temel alınan türüne dönüştürürseniz, sonuç bir sabit listesi üyesinin ilişkili tam sayı değeridir.
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
}
}
Enum.IsDefined Bir numaralandırma türünün belirli ilişkili değere sahip bir sabit listesi üyesi içerip içermediğini belirlemek için yöntemini kullanın.
Herhangi bir numaralandırma türü için, sırasıyla türüne ve türünden System.Enum gelen kutulama ve kutulama kaldırma dönüştürmeleri vardır.
C# dili belirtimi
Daha fazla bilgi için C# dil belirtiminin aşağıdaki bölümlerine bakın:
- Numaralandırmalar
- Sabit listesi değerleri ve işlemleri
- Numaralandırma mantıksal işleçleri
- Numaralandırma karşılaştırma işleçleri
- Açık numaralandırma dönüştürmeleri
- Örtük numaralandırma dönüştürmeleri