Enum Deyimi (Visual Basic)

Bir numaralandırma bildirir ve üyelerinin değerlerini tanımlar.

Sözdizimi

[ <attributelist> ] [ accessmodifier ]  [ Shadows ]
Enum enumerationname [ As datatype ]
   memberlist
End Enum

Parça

  • attributelist

    isteğe bağlı. Bu numaralandırmaya uygulanan özniteliklerin listesi. Öznitelik listesini açılı ayraçlar ("<" ve ">") içine almanız gerekir.

    FlagsAttribute özniteliği, numaralandırma örneğinin değerinin birden çok numaralandırma üyesi içerebileceğini ve her üyenin numaralandırma değerinde bir bit alanını temsil ettiğini gösterir.

  • accessmodifier

    isteğe bağlı. Bu numaralandırmaya hangi kodun erişebileceğini belirtir. Aşağıdakilerden biri olabilir:

  • Shadows

    isteğe bağlı. Bu numaralandırmanın aynı adlı bir programlama öğesini veya aşırı yüklenmiş öğe kümesini temel sınıfta yeniden adlandırdığını ve gizlediğini belirtir. Gölgeler'i üyelerinden herhangi birinde değil, yalnızca numaralandırmanın kendisinde belirtebilirsiniz.

  • enumerationname

    Gerekli. Numaralandırmanın adı. Geçerli adlar hakkında bilgi için bkz . Bildirilen Öğe Adları.

  • datatype

    isteğe bağlı. Numaralandırmanın ve tüm üyelerinin veri türü.

  • memberlist

    Gerekli. Bu deyimde bildirilmekte olan üye sabitlerinin listesi. Tek tek kaynak kodu satırlarında birden çok üye görünür.

    Her member birinin söz dizimi ve bölümleri vardır: [<attribute list>] member name [ = initializer ]

    Bölüm Açıklama
    membername Gerekli. Bu üyenin adı.
    initializer isteğe bağlı. Derleme zamanında değerlendirilen ve bu üyeye atanan ifade.
  • End Enum

    Bloğu sonlandırır Enum .

Açıklamalar

Birbiriyle mantıksal olarak ilişkili bir dizi değişmeyen değeriniz varsa, bunları bir sabit listesi içinde birlikte tanımlayabilirsiniz. Bu, numaralandırma ve üyeleri için değerlerine göre daha kolay anımsanabilen anlamlı adlar sağlar. Daha sonra numaralandırma üyelerini kodunuzda birçok yerde kullanabilirsiniz.

Numaralandırmaları kullanmanın avantajları şunlardır:

  • Sayıların devrilmesi veya yanlış şekillendirilmesi nedeniyle oluşan hataları azaltır.

  • Gelecekte değerleri değiştirmeyi kolaylaştırır.

  • Kodun okunmasını kolaylaştırır, bu da hataların ortaya çıkma olasılığının daha düşük olduğu anlamına gelir.

  • İletme uyumluluğunu sağlar. Numaralandırmaları kullanırsanız, gelecekte birisi üye adlarına karşılık gelen değerleri değiştirirse kodunuzun başarısız olma olasılığı daha düşüktür.

Sabit listesi bir ada, temel alınan veri türüne ve bir üye kümesine sahiptir. Her üye bir sabiti temsil eder.

Herhangi bir yordamın dışında sınıf, yapı, modül veya arabirim düzeyinde bildirilen bir numaralandırma, üye sabit listesidir. Bunu bildiren sınıfın, yapının, modülün veya arabirimin bir üyesidir.

Üye numaralandırmalarına sınıf, yapı, modül veya arabirim içinde herhangi bir yerden erişilebilir. Bir sınıf, yapı veya modülün dışındaki kod, üye sabit listesi adını bu sınıf, yapı veya modülün adıyla nitelemelidir. Kaynak dosyaya imports deyimi ekleyerek tam adları kullanma gereksinimini ortadan kalabilirsiniz.

Herhangi bir sınıf, yapı, modül veya arabirimin dışında ad alanı düzeyinde bildirilen bir numaralandırma, göründüğü ad alanının bir üyesidir.

Numaralandırmanın 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.

Bir sabit listesi için öznitelikleri bir bütün olarak uygulayabilirsiniz, ancak üyelerine ayrı ayrı uygulayamayın. Öznitelik, derlemenin meta verilerine bilgi katkıda bulunur.

Veri Türü

deyimi Enum bir numaralandırmanın veri türünü bildirebilir. Her üye numaralandırmanın veri türünü alır. , , Integer, , Long, SByte, Short, UInteger, ULongveya UShortbelirtebilirsinizByte.

Numaralandırma için belirtmezseniz datatype , her üye kendi initializerveri türünü alır. hem initializerhem de datatype belirtirseniz, veri türü initializer olarak datatypedönüştürülebilir olmalıdır. datatype Yoksa veya initializer yoksa, veri türü varsayılan olarak olurInteger.

Üyeleri Başlatma

deyimi içinde Enummemberlistseçili üyelerin içeriğini başlatabilir. Üyeye atanacak bir ifade sağlamak için kullanırsınız initializer .

Bir üye için belirtmezseniz initializer , Visual Basic bunu sıfıra (içinde ilk membermemberlistise) veya hemen öncekinden memberbir değerden daha büyük bir değere başlatır.

Her initializer birinde sağlanan ifade, sabit değerlerin, önceden tanımlanmış olan diğer sabitlerin ve bu sabit listesi üyesinin önceki bir üyesi de dahil olmak üzere zaten tanımlanmış olan numaralandırma üyelerinin herhangi bir bileşimi olabilir. Bu tür öğeleri birleştirmek için aritmetik ve mantıksal işleçler kullanabilirsiniz.

içinde initializerdeğişkenleri veya işlevleri kullanamazsınız. Ancak ve CShortgibi CByte dönüştürme anahtar sözcüklerini kullanabilirsiniz. Bunu bir sabit String veya Char bağımsız değişkenle çağırırsanız da kullanabilirsinizAscW, çünkü bu derleme zamanında değerlendirilebilir.

Sabit listelerin kayan nokta değerleri olamaz. Üyeye kayan nokta değeri atanır ve Option Strict değeri açık olarak ayarlanırsa, derleyici hatası oluşur. Kapalıysa Option Strict , değer otomatik olarak türüne Enum 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ünün izin verdiği en yüksek değere başlatırsanız, derleyici bir hata bildirir.

Değiştiriciler

Sınıf, yapı, modül ve arabirim üyesi sabit listeleri varsayılan olarak genel erişimdir. Erişim değiştiricileri ile erişim düzeylerini ayarlayabilirsiniz. Ad alanı üyesi numaralandırmaları varsayılan olarak arkadaş erişimine sahiptir. Erişim düzeylerini genel olarak ayarlayabilirsiniz, ancak özel veya korumalı olarak ayarlanmaz. Daha fazla bilgi için bkz . Visual Basic'te erişim düzeyleri.

Tüm numaralandırma üyeleri genel erişime sahiptir ve bu üyeler üzerinde herhangi bir erişim değiştirici kullanamazsınız. Ancak, numaralandırmanın kendisi daha kısıtlı bir erişim düzeyine sahipse, belirtilen sabit listesi erişim düzeyi önceliklidir.

Varsayılan olarak, tüm numaralandırmalar tür ve alanları sabittir. Bu nedenle Shared, bir numaralandırma veya üyeleri bildirildiğinde , Staticve ReadOnly anahtar sözcükleri kullanılamaz.

Birden Çok Değer Atama

Numaralandırmalar genellikle birbirini dışlayan değerleri temsil eder. özniteliğini Enum bildirime FlagsAttribute ekleyerek, bunun yerine numaralandırmanın bir örneğine birden çok değer atayabilirsiniz. FlagsAttribute özniteliği, numaralandırmanın bir bit alanı, yani bir bayrak kümesi olarak ele alındığını belirtir. Bunlar bit tabanlı numaralandırmalar olarak adlandırılır.

özniteliğini FlagsAttribute kullanarak bir numaralandırma bildirdiğinizde, değerler için 2, yani 1, 2, 4, 8, 16 vb. yetkilerini kullanmanızı öneririz. "Hiçbiri" değerinin 0 olan bir üyenin adı olmasını da öneririz. Ek yönergeler için bkz FlagsAttribute . ve Enum.

Örnek 1

Aşağıdaki örnekte deyiminin nasıl kullanılacağı gösterilmektedir Enum . Üyeye olarak Mediumdeğil olarak EggSizeEnum.Mediumbaşvurulduğunu unutmayın.

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 sınıfın Egg dışındadır. Bu nedenle, EggSizeEnum olarak tam olarak nitelenmiş.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 örnekte, adlandırılmış sabit değerlerden oluşan ilgili bir küme tanımlamak için deyimi kullanılır Enum . Bu durumda, değerler bir veritabanı için veri giriş 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 örnekte hem pozitif hem de negatif sayıları içeren değerler gösterilmektedir.

Enum SecurityLevel
    IllegalEntry = -1
    MinimumSecurity = 0
    MaximumSecurity = 1
End Enum

Örnek 5

Aşağıdaki örnekte, bir As sabit listesi belirtmek datatype için bir yan tümcesi kullanılır.

Public Enum MyEnum As Byte
    Zero
    One
    Two
End Enum

Örnek 6

Aşağıdaki örnekte bit düzeyinde numaralandırmanın nasıl kullanılacağı gösterilmektedir. Bit düzeyinde sabit listesi örneğine birden çok değer atanabilir. bildirimi Enum , numaralandırmanın FlagsAttribute bir bayrak kümesi olarak ele alınabileceğ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ırmada yinelenir. Numaralandırmadan GetNames bir üye adları dizisi almak ve GetValues üye değerleri dizisi 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.