Enum — Instrukcja (Visual Basic)

Deklaruje wyliczenie i definiuje wartości jego elementów członkowskich.

Składnia

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

generatora

  • attributelist

    Opcjonalny. Lista atrybutów, które mają zastosowanie do tego wyliczenia. Należy ująć listę atrybutów w nawiasach kątowych ("<" i ">").

    Atrybut FlagsAttribute wskazuje, że wartość wystąpienia wyliczenia może zawierać wiele elementów członkowskich wyliczenia, a każdy element członkowski reprezentuje pole bitowe w wartości wyliczenia.

  • accessmodifier

    Opcjonalny. Określa, jaki kod może uzyskać dostęp do tego wyliczenia. Może być jednym z następujących elementów:

  • Shadows

    Opcjonalny. Określa, że ta wyliczenie redecyduje i ukrywa identycznie nazwany element programowania lub zestaw przeciążonych elementów w klasie bazowej. Można określić tylko cienie w samym wyliczeniu, a nie na żadnym z jego elementów członkowskich.

  • enumerationname

    Wymagany. Nazwa wyliczenia. Aby uzyskać informacje na temat prawidłowych nazw, zobacz Deklarowane nazwy elementów.

  • datatype

    Opcjonalny. Typ danych wyliczenia i wszystkich jego elementów członkowskich.

  • memberlist

    Wymagany. Lista stałych składowych zadeklarowanych w tej instrukcji. Wiele elementów członkowskich jest wyświetlanych w poszczególnych wierszach kodu źródłowego.

    Każda z nich member ma następującą składnię i części: [<attribute list>] member name [ = initializer ]

    Element opis
    membername Wymagane. Nazwa tego elementu członkowskiego.
    initializer Opcjonalny. Wyrażenie obliczane w czasie kompilacji i przypisane do tego elementu członkowskiego.
  • End Enum

    Enum Przerywa blok.

Uwagi

Jeśli masz zestaw niezmiennych wartości, które są logicznie powiązane ze sobą, możesz je zdefiniować razem w wyliczenie. Zapewnia to znaczące nazwy wyliczenia i jego składowych, które są łatwiejsze do zapamiętania niż ich wartości. Następnie możesz użyć elementów członkowskich wyliczenia w wielu miejscach w kodzie.

Korzyści wynikające z używania wyliczenia obejmują następujące elementy:

  • Zmniejsza błędy spowodowane transponowaniem lub mistypingiem liczb.

  • Ułatwia zmianę wartości w przyszłości.

  • Ułatwia odczytywanie kodu, co oznacza, że jest mniej prawdopodobne, że zostaną wprowadzone błędy.

  • Zapewnia zgodność z przyszłością. Jeśli używasz wyliczenia, kod jest mniej prawdopodobny, jeśli w przyszłości ktoś zmieni wartości odpowiadające nazwom elementów członkowskich.

Wyliczenie ma nazwę, podstawowy typ danych i zestaw elementów członkowskich. Każdy element członkowski reprezentuje stałą.

Wyliczenie zadeklarowane na poziomie klasy, struktury, modułu lub interfejsu poza dowolną procedurą jest wyliczeniem składowym. Jest to element członkowski klasy, struktury, modułu lub interfejsu, który go deklaruje.

Dostęp do wyliczenia składowych można uzyskać z dowolnego miejsca w swojej klasie, strukturze, module lub interfejsie. Kod poza klasą, strukturą lub modułem musi kwalifikować nazwę wyliczenia składowego z nazwą tej klasy, struktury lub modułu. Można uniknąć konieczności używania w pełni kwalifikowanych nazw, dodając instrukcję Import do pliku źródłowego.

Wyliczenie zadeklarowane na poziomie przestrzeni nazw poza dowolną klasą, strukturą, modułem lub interfejsem jest elementem członkowskim przestrzeni nazw, w której się pojawia.

Kontekst deklaracji dla wyliczenia musi być plikiem źródłowym, przestrzenią nazw, klasą, strukturą, modułem lub interfejsem i nie może być procedurą. Aby uzyskać więcej informacji, zobacz Konteksty deklaracji i Domyślne poziomy dostępu.

Atrybuty można zastosować do wyliczenia jako całości, ale nie do jego składowych indywidualnie. Atrybut współtworzy informacje o metadanych zestawu.

Typ danych

Instrukcja Enum może zadeklarować typ danych wyliczenia. Każdy element członkowski przyjmuje typ danych wyliczenia. Można określić Byte, , Integer, LongUIntegerULongSByteShortlub .UShort

Jeśli nie określisz datatype wyliczenia, każdy element członkowski przyjmuje typ danych .initializer Jeśli określisz wartości i datatypeinitializer, typ initializer danych musi być konwertowany na datatypewartość . Jeśli ani datatypeinitializer nie istnieje, typ danych jest domyślnie ustawiona na Integer.

Inicjowanie elementów członkowskich

Instrukcja Enum może zainicjować zawartość wybranych elementów członkowskich w pliku memberlist. initializer Służy do podawania wyrażenia, które ma zostać przypisane do elementu członkowskiego.

Jeśli nie określisz initializer elementu członkowskiego, program Visual Basic inicjuje go do zera (jeśli jest to pierwszy member w memberlistelemencie ) lub do wartości większej o jedną niż bezpośrednio poprzednia member.

Wyrażenie podane w każdym initializer z nich może być dowolną kombinacją literałów, innych stałych, które są już zdefiniowane, oraz składowych wyliczania, w tym poprzedniego elementu członkowskiego tego wyliczenia. Aby połączyć takie elementy, można użyć operatorów arytmetycznych i logicznych.

Nie można używać zmiennych ani funkcji w programie initializer. Można jednak użyć słów kluczowych konwersji, takich jak CByte i CShort. Można również użyć AscW metody w przypadku wywołania jej ze stałą String lub Char argumentem, ponieważ można ją ocenić w czasie kompilacji.

Wyliczenia nie mogą mieć wartości zmiennoprzecinkowych. Jeśli element członkowski ma przypisaną wartość zmiennoprzecinkową i Option Strict jest ustawiony na wartość on, wystąpi błąd kompilatora. Jeśli Option Strict wartość jest wyłączona, wartość jest automatycznie konwertowana na Enum typ.

Jeśli wartość elementu członkowskiego przekracza dozwolony zakres dla bazowego typu danych lub jeśli zainicjujesz dowolny element członkowski do maksymalnej wartości dozwolonej przez bazowy typ danych, kompilator zgłasza błąd.

Modyfikatory

Wyliczenia składowe klasy, struktury, modułu i interfejsu są domyślnie dostępne publicznie. Możesz dostosować ich poziomy dostępu za pomocą modyfikatorów dostępu. Wyliczenia elementów członkowskich przestrzeni nazw są domyślnie dostępne dla znajomych. Możesz dostosować ich poziomy dostępu do publicznej wiadomości, ale nie do prywatnych lub chronionych. Aby uzyskać więcej informacji, zobacz Poziomy dostępu w Visual Basic.

Wszyscy członkowie wyliczania mają dostęp publiczny i nie można na nich używać żadnych modyfikatorów dostępu. Jeśli jednak sam wyliczenie ma bardziej ograniczony poziom dostępu, określony poziom dostępu wyliczania ma pierwszeństwo.

Domyślnie wszystkie wyliczenia są typami, a ich pola są stałymi. W związku z Sharedtym słowa kluczowe , Statici ReadOnly nie mogą być używane podczas deklarowania wyliczenia lub jego elementów członkowskich.

Przypisywanie wielu wartości

Wyliczenia zwykle reprezentują wzajemnie wykluczające się wartości. Po uwzględnieniu atrybutu FlagsAttributeEnum w deklaracji można zamiast tego przypisać wiele wartości do wystąpienia wyliczenia. Atrybut FlagsAttribute określa, że wyliczenie ma być traktowane jako pole bitowe, czyli zestaw flag. Są to nazywane wyliczeniami bitowymi .

W przypadku deklarowania wyliczenia przy użyciu atrybutu FlagsAttribute zalecamy użycie uprawnień 2, czyli 1, 2, 4, 8, 16 itd. dla wartości. Zalecamy również, aby parametr "None" był nazwą elementu członkowskiego, którego wartość to 0. Aby uzyskać dodatkowe wytyczne, zobacz FlagsAttribute i Enum.

Przykład 1

W poniższym przykładzie pokazano, jak używać instrukcji Enum . Należy pamiętać, że element członkowski jest określany jako EggSizeEnum.Medium, a nie jako 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

Przykład 2

Metoda w poniższym przykładzie znajduje się poza klasą Egg . W związku z EggSizeEnum tym jest w pełni kwalifikowany jako 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

Przykład 3

W poniższym przykładzie użyto instrukcji Enum , aby zdefiniować powiązany zestaw nazwanych wartości stałych. W takim przypadku wartości to kolory, które można wybrać do projektowania formularzy wprowadzania danych dla bazy danych.

Public Enum InterfaceColors
    MistyRose = &HE1E4FF&
    SlateGray = &H908070&
    DodgerBlue = &HFF901E&
    DeepSkyBlue = &HFFBF00&
    SpringGreen = &H7FFF00&
    ForestGreen = &H228B22&
    Goldenrod = &H20A5DA&
    Firebrick = &H2222B2&
End Enum

Przykład 4

W poniższym przykładzie przedstawiono wartości, które zawierają zarówno liczby dodatnie, jak i ujemne.

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

Przykład 5

W poniższym przykładzie klauzula As służy do określania datatype wyliczenia.

Public Enum MyEnum As Byte
    Zero
    One
    Two
End Enum

Przykład 6

W poniższym przykładzie pokazano, jak używać wyliczenia bitowego. Do wystąpienia wyliczenia bitowego można przypisać wiele wartości. Deklaracja Enum zawiera FlagsAttribute atrybut, który wskazuje, że wyliczenie może być traktowane jako zestaw flag.

' 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

Przykład 7

Poniższy przykład iteruje wyliczenie. Używa GetNames metody , aby pobrać tablicę nazw elementów członkowskich z wyliczenia i GetValues pobrać tablicę wartości składowych.

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

Zobacz też