Enum Deyimi (Visual Basic)
Bir sabit listesi bildirir ve üyelerinin değerlerini tanımlar.
Syntax
[ <attributelist> ] [ accessmodifier ] [ Shadows ]
Enum enumerationname [ As datatype ]
memberlist
End Enum
Bölümler
attributelistİsteğe bağlı. Bu sabit listesi için uygulanan özniteliklerin listesi. Öznitelik listesini açılı ayraçlar ("
<" ve ">") içine almalısınız.FlagsAttributeÖzniteliği, sabit listesinin bir örneğinin değerinin birden çok numaralandırma üyesi içerebileceğini ve her üyenin numaralandırma değerindeki bir bit alanını temsil ettiğini gösterir.
accessmodifierİsteğe bağlı. Bu numaralandırmaya erişebilecek kodu belirtir. Aşağıdakilerden biri olabilir:
Shadowsİsteğe bağlı. Bu sabit listesinin, bir temel sınıfta aynı adlı programlama öğesi veya aşırı yüklenmiş öğeler kümesini yeniden bildirdiğini ve gizlediğini belirtir. Her üye üzerinde değil, yalnızca Numaralandırmadaki gölgeleri belirtebilirsiniz.
enumerationnameGereklidir. Sabit listesinin adı. Geçerli adlar hakkında daha fazla bilgi için bkz. bildirilmemiş öğe adları.
datatypeİsteğe bağlı. Numaralandırmanın ve tüm üyelerinin veri türü.
memberlistGereklidir. Bu bildirimde bildirildiği üye sabitlerinin listesi. Tek tek kaynak kodu satırlarında birden çok üye görüntülenir.
Her birinin
memberaşağıdaki söz dizimi ve parçaları vardır:[<attribute list>] member name [ = initializer ]Bölüm Description membernameGereklidir. Bu üyenin adı. initializerİsteğe bağlı. Derleme zamanında değerlendirilen ve bu üyeye atanan ifade. EndEnumBloğu sonlandırır
Enum.
Açıklamalar
Mantıksal olarak birbirleriyle ilgili değişmeyen bir değerler kümesi varsa, bunları bir numaralandırmada birlikte tanımlayabilirsiniz. Bu, sabit listesi ve üyeleri için değerlerinden daha kolay anımsanacak anlamlı adlar sağlar. Daha sonra, sabit listesi üyelerini kodunuzda birçok yerde kullanabilirsiniz.
Numaralandırmalar kullanmanın avantajları şunlardır:
Dışarı veya hatalı yazma numaralarının neden olduğu hataları azaltır.
Gelecekte değerlerin değiştirilmesini kolaylaştırır.
Kodun daha kolay okunmasını sağlar, bu da hataların tanıtılmasından daha az olabilir.
İleriye dönük uyumluluğu sağlar. Numaralandırmalar kullanıyorsanız, gelecekte birisinin üye adlarına karşılık gelen değerleri değiştirmesinin ardından kodunuzun başarısız olma olasılığı düşüktür.
Bir numaralandırma bir ada, temel alınan veri türüne ve bir üye kümesine sahiptir. Her üye bir sabiti temsil eder.
Sınıf, yapı, modül veya arabirim düzeyinde tanımlanan ve herhangi bir yordamın dışında bir numaralandırma, bir üye numaralandırmadır. Bunu bildiren sınıf, yapı, modül veya arabirimin bir üyesidir.
Üye numaralandırmalara, sınıfları, yapısı, modülü veya arabirimi içinde herhangi bir yerden erişilebilir. Bir sınıf, yapı veya modülün dışındaki kodun, bir üye sabit listesinin adını bu sınıf, yapı veya modülün adı ile nitelemesi gerekir. Kaynak dosyaya bir Içeri aktarmalar açıklaması ekleyerek tam nitelikli adlar kullanma gereksinimini ortadan kaldırabilirsiniz.
Herhangi bir sınıf, yapı, modül veya arabirim dışında, ad alanı düzeyinde belirtilen bir sabit listesi, göründüğü ad alanının bir üyesidir.
Bir numaralandırma için Bildirim bağlamı bir kaynak dosya, ad alanı, sınıf, yapı, modül veya arabirim olmalıdır ve bir yordam olamaz. Daha fazla bilgi için bkz. bildirim bağlamları ve varsayılan erişim düzeyleri.
Öznitelikleri bir numaralandırmaya bir bütün olarak uygulayabilir, ancak üyelerine tek tek atayabilirsiniz. Bir öznitelik, bilgileri derlemenin meta verilerine katkıda bulunur.
Veri Türü
Enumİfade, bir numaralandırmanın veri türünü bildirebilirler. Her üye, numaralandırmanın veri türünü alır. ,,,,, Byte Integer ,, Veya belirtebilirsiniz Long SByte Short UInteger ULong UShort .
datatypeSabit listesi için belirtmezseniz, her üye öğesinin veri türünü alır initializer . Hem hem de belirtirseniz datatype initializer , veri türü initializer öğesine dönüştürülebilir olmalıdır datatype . Ne yoksa datatype ne de initializer yoksa, veri türü varsayılan olarak olur Integer .
Üyeler başlatılıyor
Enumİfade, içindeki seçili üyelerin içeriğini başlatabilir memberlist . initializerÜyeye atanacak bir ifade sağlamak için kullanırsınız.
initializerbir üye için belirtmeyin, Visual Basic bunu sıfıra (ilk member içinde ise memberlist ) veya bir değerden daha büyük bir değere, hemen öncesinde gelen bir değere başlatır member .
Her birinde sağlanan ifade initializer , herhangi bir sabit değer, önceden tanımlanmış diğer sabitler ve bu numaralandırmanın önceki bir üyesi dahil, zaten tanımlanmış olan sabit listesi üyeleri olabilir. Bu tür öğeleri birleştirmek için aritmetik ve mantıksal işleçler kullanabilirsiniz.
İçindeki değişkenleri veya işlevleri kullanamazsınız initializer . Ancak, ve gibi dönüştürme anahtar sözcüklerini kullanabilirsiniz CByte CShort . AscW String Char Derleme zamanında değerlendirilebileceğinizden, bu değeri bir sabit veya bağımsız değişkenle birlikte çağırırsanız de kullanabilirsiniz.
Numaralandırmalar kayan nokta değerlerine sahip olamaz. Bir üyeye kayan nokta değeri atanmışsa ve Option Strict Açık olarak ayarlanırsa, bir derleyici hatası oluşur. Option StrictKapalıysa, değer otomatik olarak Enum türüne dönüştürülür.
Bir üyenin değeri, temel alınan veri türü için izin verilen aralığı aşarsa veya herhangi bir üyeyi temel alınan veri türü tarafından izin verilen en yüksek değere başlattığınızda, derleyici bir hata bildirir.
Değiştiriciler
Sınıf, yapı, modül ve arabirim üyesi numaralandırmalar, genel erişim için varsayılan. Erişim değiştiricilerini kullanarak erişim düzeylerini ayarlayabilirsiniz. Ad alanı üyesi numaralandırmalar arkadaş erişimi için varsayılan değer. Erişim düzeylerini herkese açık olarak ayarlayabilir, ancak özel veya korumalı olamaz. Daha fazla bilgi için bkz. Visual Basic erişim düzeyleri.
Tüm numaralandırma üyelerinin ortak erişimi vardır ve bunlar üzerinde herhangi bir erişim değiştiricilerini kullanamazsınız. Ancak, numaralandırmanın kendisi daha kısıtlı erişim düzeyine sahipse, belirtilen numaralandırma erişim düzeyi önceliklidir.
Varsayılan olarak, tüm numaralandırmalar türlerdir ve alanları sabittir. Bu nedenle Shared ,, Static ve ReadOnly anahtar sözcükleri bir numaralandırma veya üyeleri bildirirken kullanılamaz.
Birden çok değer atama
Numaralandırmalar genellikle birbirini dışlayan değerleri temsil eder. FlagsAttributeÖzniteliği Enum bildirime ekleyerek, bunun yerine sabit listesinin bir örneğine birden çok değer atayabilirsiniz. FlagsAttributeÖzniteliği, numaralandırmanın bir bit alanı, yani bir bayrak kümesi olarak değerlendirilip değerlendirilmediğini belirtir. Bunlara bit düzeyinde numaralandırmalar denir.
Özniteliği kullanarak bir numaralandırma bildirdiğinizde FlagsAttribute , değerler için 2, bu, 1, 2, 4, 8, 16, vb. üslerini kullanmanızı öneririz. Ayrıca "none" değerinin değeri 0 olan üyenin adı olması önerilir. Ek yönergeler için bkz FlagsAttribute . ve Enum .
Örnek 1
Aşağıdaki örnek, ifadesinin nasıl kullanılacağını göstermektedir Enum . Üyenin olarak adlandırıldığına ve farklı şekilde olduğunu unutmayın EggSizeEnum.Medium Medium .
Public Class Egg
Enum EggSizeEnum
Jumbo
ExtraLarge
Large
Medium
Small
End Enum
Public Sub Poach()
Dim size As EggSizeEnum
size = EggSizeEnum.Medium
' Continue processing...
End Sub
End Class
Örnek 2
Aşağıdaki örnekteki yöntemi Egg sınıfının dışındadır. Bu nedenle, EggSizeEnum tam olarak nitelenir Egg.EggSizeEnum .
Public Sub Scramble(ByVal size As Egg.EggSizeEnum)
' Process for the three largest sizes.
' Throw an exception for any other size.
Select Case size
Case Egg.EggSizeEnum.Jumbo
' Process.
Case Egg.EggSizeEnum.ExtraLarge
' Process.
Case Egg.EggSizeEnum.Large
' Process.
Case Else
Throw New ApplicationException("size is invalid: " & size.ToString)
End Select
End Sub
Örnek 3
Aşağıdaki örnek, Enum ilgili bir adlandırılmış sabit değer kümesini tanımlamak için ifadesini kullanır. Bu durumda, değerler, bir veritabanı için veri girişi formları tasarlamayı seçebileceğiniz renklerdir.
Public Enum InterfaceColors
MistyRose = &HE1E4FF&
SlateGray = &H908070&
DodgerBlue = &HFF901E&
DeepSkyBlue = &HFFBF00&
SpringGreen = &H7FFF00&
ForestGreen = &H228B22&
Goldenrod = &H20A5DA&
Firebrick = &H2222B2&
End Enum
Örnek 4
Aşağıdaki örnek, hem pozitif hem de negatif sayı içeren değerleri gösterir.
Enum SecurityLevel
IllegalEntry = -1
MinimumSecurity = 0
MaximumSecurity = 1
End Enum
Örnek 5
Aşağıdaki örnekte, bir As sabit listesini belirtmek için bir yan tümce kullanılır datatype .
Public Enum MyEnum As Byte
Zero
One
Two
End Enum
Örnek 6
Aşağıdaki örnek bit düzeyinde numaralandırmanın nasıl kullanılacağını göstermektedir. Bit düzeyinde numaralandırma örneğine birden çok değer atanabilir. EnumBildirimi, FlagsAttribute numaralandırmanın bir dizi bayrak olarak değerlendirileceğini gösteren özniteliğini içerir.
' Apply the Flags attribute, which allows an instance
' of the enumeration to have multiple values.
<Flags()> Public Enum FilePermissions As Integer
None = 0
Create = 1
Read = 2
Update = 4
Delete = 8
End Enum
Public Sub ShowBitwiseEnum()
' Declare the non-exclusive enumeration object and
' set it to multiple values.
Dim perm As FilePermissions
perm = FilePermissions.Read Or FilePermissions.Update
' Show the values in the enumeration object.
Console.WriteLine(perm.ToString)
' Output: Read, Update
' Show the total integer value of all values
' in the enumeration object.
Console.WriteLine(CInt(perm))
' Output: 6
' Show whether the enumeration object contains
' the specified flag.
Console.WriteLine(perm.HasFlag(FilePermissions.Update))
' Output: True
End Sub
Örnek 7
Aşağıdaki örnek bir numaralandırma boyunca yinelenir. GetNamesNumaralandırmadaki üye adları dizisini almak ve GetValues bir dizi üye değeri almak için yöntemini kullanır.
Enum EggSizeEnum
Jumbo
ExtraLarge
Large
Medium
Small
End Enum
Public Sub Iterate()
Dim names = [Enum].GetNames(GetType(EggSizeEnum))
For Each name In names
Console.Write(name & " ")
Next
Console.WriteLine()
' Output: Jumbo ExtraLarge Large Medium Small
Dim values = [Enum].GetValues(GetType(EggSizeEnum))
For Each value In values
Console.Write(value & " ")
Next
Console.WriteLine()
' Output: 0 1 2 3 4
End Sub