Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
20.1 Genel
Sabit listesi türü, adlandırılmış sabitler kümesini bildiren ayrı bir değer türüdür (§8,3).
Örnek: Örnek
enum Color { Red, Green, Blue },
ColorveRedüyeleriyleGreenadlıBluebir sabit listesi türü bildirir.son örnek
20.2 Numaralandırma bildirimleri
Sabit listesi bildirimi yeni bir sabit listesi türü bildirir. Sabit listesi bildirimi anahtar sözcüğüyle enumbaşlar ve adı, erişilebilirliği, temel alınan türü ve sabit listesi üyelerini tanımlar.
enum_declaration
: attributes? enum_modifier* 'enum' identifier enum_base? enum_body ';'?
;
enum_base
: ':' integral_type
| ':' integral_type_name
;
integral_type_name
: type_name // Shall resolve to an integral type other than char
;
enum_body
: '{' enum_member_declarations? '}'
| '{' enum_member_declarations ',' '}'
;
Her sabit listesi türü, sabit listesi türünün temel türü olarak adlandırılan karşılık gelen bir tamsayı türüne sahiptir. Bu temel tür, numaralandırmada tanımlanan tüm numaralandırıcı değerlerini temsil edebilecektir.
enum_base varsa, temel alınan türü açıkça bildirir. Temel alınan tür, dışındaki integral türlerinden (char) biri olmalıdır. Temel alınan tür bir integral_type (§8.3.5) veya bir integral_type_nametarafından belirtilebilir. kullanım integral_type_name yönergelerini (§14.5type_name) hesaba katarak (§7.8.1) ile aynı şekilde çözümlenir.
Not: Tür
char, anahtar sözcük veya aracılığıylaintegral_type_nametemel tür olarak kullanılamaz. son not
Temel alınan bir türü açıkça bildirmeyen bir sabit listesi bildiriminin temel alınan türü vardır int.
Örnek: Örnek
enum Color : long { Red, Green, Blue }temel alınan türüne
longsahip bir sabit listesi bildirir.son örnek
Not: Geliştirici, örneğinde olduğu gibi, aralığında yer alan ancak aralığında olmayan
longdeğerlerinlongkullanımını etkinleştirmek veya bu seçeneği gelecekte korumak için temel alınan türünüintkullanmayı seçebilir. son not
Not: C# bir enum_body sondaki virgüle izin verir, aynı array_initializer (§17.7) bir virgüle izin verdiği gibi. son not
Sabit listesi bildirimi tür parametre listesi içeremez, ancak genel bir sınıf bildiriminin veya genel yapı bildiriminin içinde iç içe geçmiş herhangi bir sabit listesi genel bir sabit listesi bildirimidir, çünkü kapsayan türün tür bağımsız değişkenleri oluşturulmuş bir tür (§8.4) oluşturmak için sağlanmalıdır.
20.3 Numaralandırma değiştiricileri
enum_declaration isteğe bağlı olarak bir sabit listesi değiştirici dizisi içerebilir:
enum_modifier
: 'new'
| 'public'
| 'protected'
| 'internal'
| 'private'
;
Aynı değiştiricinin bir sabit listesi bildiriminde birden çok kez görünmesi derleme zamanı hatasıdır.
Bir sabit listesi bildiriminin değiştiricileri, sınıf bildiriminin (§15.2.2) anlamları aynıdır. Ancak, bir sabit listesi bildiriminde abstract, sealedve ve static değiştiricilerine izin verilmez. Sabit listeleri soyut olamaz ve türetmeye izin vermez.
20.4 Numaralandırma üyeleri
Bir sabit listesi türü bildiriminin gövdesi, sabit listesi türünün adlandırılmış sabitleri olan sıfır veya daha fazla sabit listesi üyesini tanımlar. Hiçbir sabit listesi üyesi aynı ada sahip olamaz.
enum_member_declarations
: enum_member_declaration (',' enum_member_declaration)*
;
enum_member_declaration
: attributes? identifier ('=' constant_expression)?
;
Her sabit listesi üyesinin ilişkili bir sabit değeri vardır. Bu değerin türü, içeren sabit listesi için temel alınan türdür. Her bir sabit üyenin sabit değeri, sabit sabit listesi için temel alınan türün aralığında olmalıdır.
Örnek: Örnek
enum Color: uint { Red = -1, Green = -2, Blue = -3 }, ve
-1sabit değerleri temel alınan tam sayı-2-3türününuintaralığında olmadığından derleme zamanı hatasıyla sonuçlanır.son örnek
Birden çok sabit listesi üyesi aynı ilişkili değeri paylaşabilir.
Örnek: Örnek
enum Color { Red, Green, Blue, Max = Blue }, iki sabit listesi üyesinin (
BlueveMax) aynı ilişkili değere sahip olduğu bir sabit listesi gösterir.son örnek
Bir sabit listesi üyesinin ilişkili değeri örtük veya açıkça atanır. Sabit listesi üyesinin bildiriminde constant_expression başlatıcısı varsa, bu sabit ifadenin değeri, sabit sayının temel alınan türüne örtük olarak dönüştürülür ve enum üyesinin ilişkili değeridir. Sabit listesi üyesinin bildiriminde başlatıcı yoksa, ilişkili değeri örtük olarak aşağıdaki gibi ayarlanır:
- Sabit listesi üyesi enum türünde bildirilen ilk sabit listesi üyesiyse, ilişkili değeri sıfırdır.
- Aksi takdirde, sabit listesi üyesinin ilişkili değeri, metin olarak enum üyesinden önceki üyenin ilişkili değeri bir artırılarak elde edilir. Bu artan değer, temel alınan tür tarafından temsil edilebilecek değerler aralığında olmalıdır, aksi takdirde bir derleme zamanı hatası oluşur.
Örnek: Örnek
enum Color { Red, Green = 10, Blue } class Test { static void Main() { Console.WriteLine(StringFromColor(Color.Red)); Console.WriteLine(StringFromColor(Color.Green)); Console.WriteLine(StringFromColor(Color.Blue)); } static string StringFromColor(Color c) { switch (c) { case Color.Red: return $"Red = {(int) c}"; case Color.Green: return $"Green = {(int) c}"; case Color.Blue: return $"Blue = {(int) c}"; default: return "Invalid color"; } } }sabit listesi üye adlarını ve ilişkili değerlerini yazdırır. Çıktı şu olur:
Red = 0 Green = 10 Blue = 11aşağıdaki nedenlerle:
- sabit listesi üyesine
Redotomatik olarak sıfır değeri atanır (başlatıcısı olmadığından ve ilk sabit listesi üyesi olduğundan);- sabit listesi üyesine
Greenaçıkça değeri10verilir;- ve sabit listesi üyesine
Blueotomatik olarak kendisinden önce gelen üyeden bir büyük değer atanır.son örnek
Bir sabit listesi üyesinin ilişkili değeri, doğrudan veya dolaylı olarak kendi ilişkili sabit listesi üyesinin değerini kullanmaz. Bu döngüsellik kısıtlaması dışında, numaralandırma üyesi başlatıcıları metin konumlarından bağımsız olarak diğer sabit listesi üye başlatıcılarına serbestçe başvurabilir. Bir numaralandırma üyesi başlatıcısı içinde, diğer sabit listesi üyelerinin değerleri her zaman kendi temel türlerinin türüne sahip olarak değerlendirilir, böylece diğer sabit listesi üyelerine başvururken atamalar gerekli değildir.
Örnek: Örnek
enum Circular { A = B, B }ve bildirimleri döngüsel olduğundan derleme zamanı hatasıyla
ABsonuçlanır.Aaçıkça bağlıdırBveBörtük olarak bağlıdırA.son örnek
Numaralandırma üyeleri, sınıflar içindeki alanlara tam olarak benzer şekilde adlandırılır ve kapsamına alınır. Bir sabit listesi üyesinin kapsamı, içeren sabit listesi türünün gövdesidir. Bu kapsamda, sabit listesi üyelerine basit adlarıyla başvurabilirsiniz. Diğer tüm kodlardan bir sabit listesi üyesinin adı, sabit listesi türü adıyla nitelenecektir. Sabit listesi üyelerinin herhangi bir bildirilen erişilebilirliği yoktur; bir sabit listesi üyesine, içeren sabit listesi türü erişilebilir durumdaysa erişilebilir.
20.5 System.Enum türü
Tür System.Enum , tüm sabit listesi türlerinin soyut temel sınıfıdır (bu, sabit listesi türünün temel alınan türünden farklıdır) ve öğesinden devralınan System.Enum üyeler herhangi bir sabit listesi türünde kullanılabilir. Herhangi bir numaralandırma türünden öğesine bir kutulama dönüştürmesi (§10.2.9
System.Enum Bunun kendisi bir enum_type olmadığını unutmayın. Bunun yerine, tüm enum_type türetildiği bir class_type. Türü System.Enum , türünden System.ValueType devralan (§8.3.2) türünden objectdevralır. Çalışma zamanında, türdeki bir değer veya herhangi bir sabit listesi türünde System.Enum kutulanmış değere başvuru olabilir null .
20.6 Sabit listesi değerleri ve işlemleri
Her sabit listesi türü ayrı bir tür tanımlar; bir sabit listesi türü ile tam sayı türü arasında veya iki sabit listesi türü arasında dönüştürmek için açık bir numaralandırma dönüştürmesi (§10.3.3) gerekir. Sabit listesi türünün değer kümesi, temel alınan türün değer kümesiyle aynıdır ve adlandırılmış sabitlerin değerleriyle sınırlı değildir. Bir numaralandırmanın temel türündeki herhangi bir değer, sabit listesi türüne atanabilir ve bu sabit listesi türünün ayrı geçerli bir değeridir.
Numaralandırma üyeleri, içeren sabit listesi türlerinin türüne sahiptir (diğer sabit listesi üyesi başlatıcıları dışında: bkz . §20.4). İlişkili değere sahip sabit listesi türünde E bildirilen bir sabit listesi üyesinin değeridirv(E)v.
Aşağıdaki işleçler sabit listesi türlerinin değerlerinde kullanılabilir:
-
==,!=,<,>,<=, (>=§12.14.6) - ikili
+(§12.12.5) - ikili
-(§12.12.6) -
^,&,|(§12.15.3) -
~(§12.9.5) -
++,--(§12.8.16 ve §12.9.7) -
sizeof(§24.6.9)
Her sabit listesi türü otomatik olarak sınıfından System.Enum türetilir (sırayla ve System.ValueTypeöğesinden object türetilir). Bu nedenle, bu sınıfın devralınan yöntemleri ve özellikleri bir sabit listesi türündeki değerlerde kullanılabilir.
ECMA C# draft specification