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 initializer
an. Wenn Sie sowohl als datatype
auch initializer
angeben, muss der Datentyp von initializer
in datatype
konvertiert werden. Wenn weder datatype
noch initializer
vorhanden ist, ist der Datentyp standardmäßig auf Integer
festgelegt.
Initialisieren von Membern
Die Enum
-Anweisung kann den Inhalt ausgewählter Member in memberlist
initialisieren. 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 memberlist
handelt) 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 initializer
verwenden. Sie können jedoch Konvertierungsstichwörter wie CByte
und CShort
verwenden. 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 Shared
Schlüsselwörter , Static
und 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.Medium
und nicht als Medium
bezeichnet 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