Enum-Anweisung (Visual Basic)

Deklariert eine Enumeration und definiert die Werte ihrer Member.

Syntax

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

Bestandteile

  • attributelist

    Optional. Liste der Attribute, die für diese Enumeration gelten. Sie müssen die Attributliste in spitze Klammern („<“ und „>“) einschließen.

    Das FlagsAttribute Attribut gibt an, dass der Wert eines instance der Enumeration mehrere Enumerationsmember enthalten kann und dass jedes Element ein Bitfeld im Enumerationswert darstellt.

  • accessmodifier

    Optional. Gibt an, welcher Code auf diese Enumeration zugreifen kann. Dabei kann es sich um eine der folgenden Methoden handeln:

  • Shadows

    Optional. Gibt an, dass diese Aufzählung ein gleichnamiges Programmierelement oder einen Satz von überladenen Elementen in einer Basisklasse neu deklariert und versteckt. Sie können Schatten nur für die Enumeration selbst angeben, nicht für eines ihrer Member.

  • enumerationname

    Erforderlich. Der Name der Enumeration. Informationen zu gültigen Namen finden Sie unter Deklarierte Elementnamen.

  • datatype

    Optional. Datentyp der Enumeration und aller zugehörigen Member.

  • memberlist

    Erforderlich. Liste der Memberkonstanten, die in dieser Anweisung deklariert werden. In einzelnen Quellcodezeilen werden mehrere Member angezeigt.

    Jede member weist folgende Syntax und Bestandteile auf: [<attribute list>] member name [ = initializer ]

    Teil Beschreibung
    membername Erforderlich. Der Name dieses Members.
    initializer Optional. Ausdruck, der zur Kompilierzeit ausgewertet und diesem Member zugewiesen wird.
  • End Enum

    Beendet den Enum-Block.

Bemerkungen

Wenn Sie über einen Satz unveränderlicher Werte verfügen, die logisch miteinander verknüpft sind, können Sie diese in einer Enumeration gemeinsam definieren. Dadurch werden aussagekräftige Namen für die Enumeration und ihre Member bereitgestellt, die leichter zu merken sind als ihre Werte. Anschließend können Sie die Enumerationsmember an vielen Stellen in Ihrem Code verwenden.

Die Vorteile der Verwendung von Aufzählungen sind unter anderem folgende:

  • Verringert Fehler, die durch Vertauschen oder Vertippen von Zahlen entstehen.

  • Das zukünftige Ändern von Werten wird vereinfacht.

  • Macht den Code leichter lesbar, was bedeutet, dass die Wahrscheinlichkeit von Fehlern geringer ist.

  • Die Vorwärtskompatibilität wird sichergestellt. Mit Enumerationen treten bei Ihrem Code künftig wahrscheinlich weniger Fehler auf, wenn die den Werten zugehörigen Membernamen geändert werden.

Eine Enumeration verfügt über einen Namen, einen zugrunde liegenden Datentyp und eine Reihe von Membern. Jeder Member stellt eine Konstante dar.

Eine Enumeration, die auf Klassen-, Struktur-, Modul- oder Schnittstellenebene außerhalb einer Prozedur deklariert wird, ist eine Memberenumeration. Es ist ein Member der Klasse, Struktur, des Moduls oder der Schnittstelle, die es deklariert.

Auf Memberenumeration kann von überall innerhalb ihrer Klasse, Struktur, Ihres Moduls oder ihrer Schnittstelle zugegriffen werden. Code außerhalb einer Klasse, Struktur oder eines Moduls muss den Namen einer Memberaufzählung mit dem Namen dieser Klasse, Struktur oder eines Moduls qualifizieren. Sie können die Notwendigkeit der Verwendung vollqualifizierter Namen vermeiden, indem Sie der Quelldatei eine Imports-Anweisung hinzufügen.

Eine Enumeration, die auf Namespaceebene außerhalb einer Klasse, Struktur, eines Moduls oder einer Schnittstelle deklariert wird, ist ein Member des Namespace, in dem sie angezeigt wird.

Der Deklarationskontext für eine Aufzählung muss eine Quelldatei, ein Namespace, eine Klasse, eine Struktur, ein Modul oder eine Schnittstelle sein und kann nicht eine Prozedur sein. Weitere Informationen finden Sie unter Deklarationskontexte und Standardzugriffsebenen.

Sie können Attribute auf eine Enumeration als Ganzes anwenden, aber nicht einzeln auf deren Member. Ein Attribut trägt Informationen zu den Metadaten der Assembly bei.

Datentyp

Die Enum-Anweisung kann den Datentyp einer Enumeration deklarieren. Jedes Element nimmt den Datentyp der Enumeration an. Sie können Byte, Integer, Long, SByte, Short, UInteger, ULong oder UShort angeben.

Wenn Sie nicht für die -Enumeration angeben datatype , nimmt jedes Element den Datentyp seines initializeran. Wenn Sie sowohl als datatypeauch initializer angeben, muss der Datentyp von initializer in datatypekonvertiert werden. Wenn weder datatype noch initializer vorhanden ist, ist der Datentyp standardmäßig auf Integerfestgelegt.

Initialisieren von Membern

Die Enum -Anweisung kann den Inhalt ausgewählter Member in memberlistinitialisieren. Sie verwenden initializer einen Ausdruck, der dem Element zugewiesen werden soll.

Wenn Sie für einen Member nicht angeben initializer, initialisiert Visual Basic es entweder auf 0 (wenn es sich um den ersten member in memberlisthandelt) oder mit einem Wert, der um eins größer als der unmittelbar vorangehende member ist.

Der in jedem initializer bereitgestellte Ausdruck kann eine beliebige Kombination aus Literalen, anderen bereits definierten Konstanten und bereits definierten Enumerationsmembern sein, einschließlich eines vorherigen Members dieser Enumeration. Sie können arithmetische und logische Operatoren verwenden, um solche Elemente zu kombinieren.

Sie können in keine Variablen oder Funktionen initializerverwenden. Sie können jedoch Konvertierungsstichwörter wie CByte und CShortverwenden. Sie können auch verwenden AscW , wenn Sie sie mit einer Konstante String oder Char einem Argument aufrufen, da dies zur Kompilierzeit ausgewertet werden kann.

Enumerationen können keine Gleitkommawerte aufweisen. Wenn einem Member ein Gleitkommawert zugewiesen wird und Option Strict auf On festgelegt ist, tritt ein Compilerfehler auf. Wenn Option Strict der Wert deaktiviert ist, wird der Wert automatisch in den Enum Typ konvertiert.

Wenn der Wert eines Members den zulässigen Bereich für den zugrunde liegenden Datentyp überschreitet oder Wenn Sie ein Element mit dem maximal zulässigen Wert des zugrunde liegenden Datentyps initialisieren, meldet der Compiler einen Fehler.

Zusatztasten

Klassen-, Struktur-, Modul- und Schnittstellenmemberenumerzählungen haben standardmäßig öffentlichen Zugriff. Sie können ihre Zugriffsebenen mit den Zugriffsmodifizierern anpassen. Namespacememberenumerungen werden standardmäßig auf friend-Zugriff festgelegt. Sie können deren Zugriffsebenen auf öffentlich, aber nicht auf privat oder geschützt anpassen. Weitere Informationen finden Sie unter Zugriffsebenen in Visual Basic.

Alle Enumerationsmember haben öffentlichen Zugriff, und Sie können keine Zugriffsmodifizierer für sie verwenden. Wenn die Enumeration selbst jedoch über eine eingeschränktere Zugriffsebene verfügt, hat die angegebene Enumerationszugriffsebene Vorrang.

Standardmäßig sind alle Enumerationen Typen, und ihre Felder sind Konstanten. Daher können die SharedSchlüsselwörter , Staticund ReadOnly beim Deklarieren einer Enumeration oder ihrer Member nicht verwendet werden.

Zuweisen mehrerer Werte

Enumerationen stellen in der Regel werte dar, die sich gegenseitig ausschließen. Indem Sie das FlagsAttribute Attribut in die Enum Deklaration einschließen, können Sie stattdessen einer instance der Enumeration mehrere Werte zuweisen. Das FlagsAttribute-Attribut legt fest, dass die Aufzählung wie ein Bitfeld, d.h. eine Reihe von Flags, behandelt wird. Diese werden als bitweise Enumerationen bezeichnet.

Wenn Sie eine Enumeration mithilfe des FlagsAttribute -Attributs deklarieren, wird empfohlen, die Potenzen 2 zu verwenden, d. h. 1, 2, 4, 8, 16 usw. für die Werte. Außerdem wird empfohlen, dass "None" der Name eines Elements ist, dessen Wert 0 ist. Weitere Richtlinien finden Sie unter FlagsAttribute und Enum.

Beispiel 1

Im folgenden Beispiel wird veranschaulicht, wie Sie die Anweisung Enum verwenden. Beachten Sie, dass der Member als EggSizeEnum.Mediumund nicht als Mediumbezeichnet wird.

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

Beispiel 2

Die -Methode im folgenden Beispiel befindet sich außerhalb der Egg -Klasse. EggSizeEnum Daher ist voll qualifiziert als 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

Beispiel 3

Im folgenden Beispiel wird die Enum -Anweisung verwendet, um einen verwandten Satz benannter konstanter Werte zu definieren. In diesem Fall sind die Werte Farben, die Sie auswählen können, um Dateneingabeformulare für eine Datenbank zu entwerfen.

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

Beispiel 4

Das folgende Beispiel zeigt Werte, die sowohl positive als auch negative Zahlen enthalten.

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

Beispiel 5

Im folgenden Beispiel wird eine As -Klausel verwendet, um die datatype einer -Enumeration anzugeben.

Public Enum MyEnum As Byte
    Zero
    One
    Two
End Enum

Beispiel 6

Das folgende Beispiel zeigt, wie Sie eine bitweise Aufzählung verwenden können. Einer instance einer bitweisen Enumeration können mehrere Werte zugewiesen werden. Die Enum Deklaration enthält das FlagsAttribute -Attribut, das angibt, dass die Enumeration als Eine Reihe von Flags behandelt werden kann.

' 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

Beispiel 7

Das folgende Beispiel iteriert durch eine Aufzählung. Es verwendet die GetNames -Methode, um ein Array von Membernamen aus der Enumeration und GetValues ein Array von Memberwerten abzurufen.

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

Weitere Informationen