Numaralama türleri (C# başvurusu)
Bir sabit değer türü (veya enum 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 t parçasıdır. Bir numaralama türü tanımlamak için anahtar enum sözcüğünü kullanın ve enum üyelerinin adlarını belirtin:
enum Season
{
Spring,
Summer,
Autumn,
Winter
}
Varsayılan olarak, sabit liste üyelerinin ilişkili sabit değerleri türündedir; sıfır ile başlar ve tanım metin int sırasına göre bir artar. Başka bir tam sayı sayısal türünü, bir numaralama türünün temel türü olarak açıkça belirtsiniz. Ayrıca, aşağıdaki örnekte de olduğu gibi ilişkili sabit değerleri açıkça belirtebilirsiniz:
enum ErrorCode : ushort
{
None = 0,
Unknown = 1,
ConnectionLost = 100,
OutlierReading = 200
}
Bir numaralama türünün tanımı içinde bir yöntem tanımamaz. Bir numaralama türüne işlev eklemek için bir genişletme yöntemi oluşturun.
Bir numaralama türünün varsayılan değeri, sıfır karşılık gelen enum üyesine sahip olsa bile ifadesi E (E)0 tarafından üretilen değerdir.
Bir dizi birbirini dışlamalı değerlerden veya seçim birleşiminden bir seçimi temsil etmek için bir numaralama türü kullanırsınız. Seçim birleşimini temsil etmek için bir numaralama türünü bit bayrakları olarak tanımlayın.
Bit bayrakları olarak numaralama türleri
Bir numaralama türünün seçim birleşimini temsil etmek istemeniz, tek bir seçimin bit alanı olacak şekilde bu seçimler için enum üyelerini tanımlayın. Başka bir ifadeyle, bu enum üyelerinin ilişkili değerleri iki güçe sahip olması gerekir. Ardından, bitwise mantıksal işleçlerini veya | seçimlerini & birleştirmek veya seçim birleşimlerini sırasıyla birleştirmek için kullanabilirsiniz. Bir numaralama türünün bit alanları bildiriyor olduğunu belirtmek için Flags özniteliğini buna uygulama. Aşağıdaki örnekte de olduğu gibi, bir numaralama türünün tanımına bazı tipik birleşimler de dahildir.
[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 örnekler için, API başvuru sayfasının API başvuru sayfasına, Özel olmayan üyelere ve System.FlagsAttribute Flags özniteliği System.Enum bölümüne bakın.
System.Enum türü ve enum kısıtlaması
Tür, System.Enum tüm numaralama türlerinin soyut temel sınıfıdır. Bir numaralama türü ve değerleri hakkında bilgi almak için bir dizi yöntem sağlar. Daha fazla bilgi ve örnekler için API başvuru System.Enum sayfasına bakın.
C# 7.3'den itibaren, bir tür parametresinin bir numaralama türü olduğunu belirtmek için bir temel sınıf kısıtlaması System.Enum (enumkısıtlaması olarak bilinir) kullanabilirsiniz. Herhangi bir numaralama türü, bir tür parametresinin null değere sahip olmayan bir değer türü olduğunu belirtmek için kullanılan struct kısıtlamayı da karşılar.
Dönüşümler
Herhangi bir numaralama türü için, numaralama türü ile temel alınan tamsayı türü arasında açık dönüştürmeler vardır. Temel alınan türüne bir enum değeri atlarsanız sonuç, bir enum üyesinin ilişkili tamsayı 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
}
}
Bir Enum.IsDefined numaralama türünün belirli ilişkili değere sahip bir enum üyesi olup olmadığını belirlemek için yöntemini kullanın.
Herhangi bir numaralama türü için, sırasıyla türünden ve türünden kutulama ve kutudan System.Enum açma dönüştürmeleri vardır.
C# dili belirtimi
Daha fazla bilgi için C# dil belirtimlerinin aşağıdaki bölümlerine bakın:
- Numaralandırmalar
- Enum değerleri ve işlemleri
- Enumeration mantıksal işleçleri
- Numaralama karşılaştırma işleçleri
- Açık numaralama dönüştürmeleri
- Örtülü numaralama dönüştürmeleri