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.

  • enumerationname

    Gereklidir. 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ü.

  • memberlist

    Gereklidir. Bu bildirimde bildirildiği üye sabitlerinin listesi. Tek tek kaynak kodu satırlarında birden çok üye görüntülenir.

    Her birinin member aşağıdaki söz dizimi ve parçaları vardır: [<attribute list>] member name [ = initializer ]

    Bölüm Description
    membername Gereklidir. Bu üyenin adı.
    initializer İsteğe bağlı. Derleme zamanında değerlendirilen ve bu üyeye atanan ifade.
  • End Enum

    Bloğ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

Ayrıca bkz.