Numaralandırma türleri (C# başvurusu)
Numaralandırma türü (veya sabit listesi 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. Bir numaralandırma türünün temel türü olarak başka bir tam sayı sayısal türünü 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 sabit listesi 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 karşılık gelen sabit listesi üyesine sahip 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. Seçeneklerin birleşimini temsil etmek için bir numaralandırma türünü bit bayrakları olarak tanımlayın.
Sabit listesi türleri bit bayrakları olarak
Bir numaralandırma türünün bir seçim birleşimini temsil etmelerini istiyorsanız, tek bir seçimin bit alanı olması için bu seçimler için sabit listesi üyeleri tanımlayın. Başka bir ifadeyle, bu sabit listesi üyelerinin ilişkili değerleri iki güç olmalıdır. Ardından bit düzeyinde mantıksal işleçleri |
kullanabilir veya &
sırasıyla seçimleri veya seçim birleşimlerini birleştirebilirsiniz. Bir 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 bileş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 ve API başvuru sayfasının Özel olmayan üyeler ile Flags özniteliği bölümüne System.Enum bakınSystem.FlagsAttribute.
System.Enum türü ve sabit listesi 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. Temel alınan türüne bir sabit listesi değeri atarsanız , 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 bir 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ünden gelen ve giden System.Enumkutulama ve kutulama 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