Opsommingsinstructie (Visual Basic)
Declareert een opsomming en definieert de waarden van de leden.
Syntaxis
[ <attributelist> ] [ accessmodifier ] [ Shadows ]
Enum enumerationname [ As datatype ]
memberlist
End Enum
generator
attributelist
Optioneel. Lijst met kenmerken die van toepassing zijn op deze opsomming. U moet de lijst met kenmerken tussen punthaken (
<
'' en '>
' ) insluiten.Het FlagsAttribute kenmerk geeft aan dat de waarde van een exemplaar van de opsomming meerdere opsommingsleden kan bevatten en dat elk lid een bitveld in de opsommingswaarde vertegenwoordigt.
accessmodifier
Optioneel. Hiermee geeft u op welke code toegang heeft tot deze opsomming. Dit kan een van de volgende zijn:
Shadows
Optioneel. Hiermee geeft u op dat deze opsomming een identiek benoemd programmeerelement, of een set overbelaste elementen, opnieuw declareert en verbergt in een basisklasse. U kunt schaduwen alleen opgeven voor de opsomming zelf, niet voor een van de leden.
enumerationname
Vereist. Naam van de opsomming. Zie Gedeclareerde elementnamen voor informatie over geldige namen.
datatype
Optioneel. Gegevenstype van de opsomming en alle leden.
memberlist
Vereist. Lijst met lidconstanten die in deze instructie worden gedeclareerd. Meerdere leden worden weergegeven op afzonderlijke broncoderegels.
Elk
member
heeft de volgende syntaxis en onderdelen:[<attribute list>] member name [ = initializer ]
Onderdeel Beschrijving membername
Vereist. Naam van dit lid. initializer
Optioneel. Expressie die wordt geëvalueerd tijdens het compileren en toegewezen aan dit lid. End
Enum
Hiermee wordt het
Enum
blok beëindigd.
Opmerkingen
Als u een set onveranderlijke waarden hebt die logisch aan elkaar zijn gerelateerd, kunt u deze samen definiëren in een opsomming. Dit biedt betekenisvolle namen voor de opsomming en de leden, die gemakkelijker te onthouden zijn dan hun waarden. Vervolgens kunt u de opsommingsleden op veel plaatsen in uw code gebruiken.
De voordelen van het gebruik van opsommingen zijn onder andere:
Vermindert fouten die worden veroorzaakt door het transponeren of benevelen van getallen.
Hiermee kunt u in de toekomst eenvoudig waarden wijzigen.
Maakt code gemakkelijker te lezen, wat betekent dat het minder waarschijnlijk is dat er fouten worden geïntroduceerd.
Zorgt voor doorstuurcompatibiliteit. Als u opsommingen gebruikt, zal uw code minder snel mislukken als iemand in de toekomst de waarden wijzigt die overeenkomen met de ledennamen.
Een opsomming heeft een naam, een onderliggend gegevenstype en een set leden. Elk lid vertegenwoordigt een constante.
Een opsomming die is gedeclareerd op klasse-, structuur-, module- of interfaceniveau, buiten elke procedure, is een opsomming van leden. Het is lid van de klasse, structuur, module of interface die deze declareert.
Ledeninventarisaties kunnen overal binnen hun klasse, structuur, module of interface worden geopend. Code buiten een klasse, structuur of module moet de naam van een lidinventarisatie kwalificeren met de naam van die klasse, structuur of module. U kunt voorkomen dat u volledig gekwalificeerde namen moet gebruiken door een importinstructie toe te voegen aan het bronbestand.
Een opsomming die is gedeclareerd op naamruimteniveau, buiten elke klasse, structuur, module of interface, is lid van de naamruimte waarin deze wordt weergegeven.
De declaratiecontext voor een opsomming moet een bronbestand, naamruimte, klasse, structuur, module of interface zijn en kan geen procedure zijn. Zie Declaratiecontexten en standaardtoegangsniveaus voor meer informatie.
U kunt kenmerken toepassen op een opsomming als geheel, maar niet op de leden afzonderlijk. Een kenmerk draagt informatie bij aan de metagegevens van de assembly.
Gegevenstype
De Enum
instructie kan het gegevenstype van een opsomming declareren. Elk lid gebruikt het gegevenstype van de opsomming. U kunt opgevenByte
, Integer
, , Long
, SByte
, Short
, , UInteger
, , of ULong
UShort
.
Als u niet opgeeft datatype
voor de opsomming, neemt elk lid het gegevenstype van initializer
de opsomming. Als u beide datatype
opgeeft en initializer
, het gegevenstype van initializer
moet converteerbaar zijn naar datatype
. Als geen van initializer
beide aanwezig datatype
is, wordt het gegevenstype standaard ingesteld op Integer
.
Leden initialiseren
De Enum
instructie kan de inhoud van geselecteerde leden in memberlist
initialiseren. U gebruikt initializer
om een expressie op te geven die aan het lid moet worden toegewezen.
Als u niet opgeeft initializer
voor een lid, initialiseert Visual Basic deze naar nul (als dit de eerste member
in memberlist
is), of op een waarde die groter is dan die van de direct voorafgaande member
waarde.
De expressie die in elke initializer
expressie wordt opgegeven, kan elke combinatie zijn van letterlijke gegevens, andere constanten die al zijn gedefinieerd en opsommingsleden die al zijn gedefinieerd, inclusief een eerder lid van deze opsomming. U kunt rekenkundige en logische operatoren gebruiken om dergelijke elementen te combineren.
U kunt geen variabelen of functies gebruiken in initializer
. U kunt echter conversietrefwoorden zoals CByte
en CShort
. U kunt het ook gebruiken AscW
als u het aanroept met een constante String
of Char
argument, omdat dat tijdens het compileren kan worden geëvalueerd.
Opsommingen kunnen geen waarden voor drijvende komma bevatten. Als aan een lid een drijvendekommawaarde is toegewezen en Option Strict
deze is ingesteld op aan, treedt er een compilerfout op. Als Option Strict
deze optie is uitgeschakeld, wordt de waarde automatisch geconverteerd naar het Enum
type.
Als de waarde van een lid het toegestane bereik voor het onderliggende gegevenstype overschrijdt of als u een lid initialiseert tot de maximumwaarde die is toegestaan door het onderliggende gegevenstype, meldt de compiler een fout.
Modifiers
Klasse-, structuur-, module- en interfacelidinventarisaties zijn standaard voor openbare toegang. U kunt hun toegangsniveaus aanpassen met de toegangsaanpassingen. Naamruimtelidenumeraties zijn standaard voor toegang tot vrienden. U kunt hun toegangsniveaus aanpassen aan openbaar, maar niet op privé of beveiligd. Zie Access-niveaus in Visual Basic voor meer informatie.
Alle opsommingsleden hebben openbare toegang en u kunt geen wijzigingsaanpassingen voor toegang gebruiken. Als de opsomming zelf echter een beperkter toegangsniveau heeft, heeft het opgegeven toegangsniveau voor opsomming voorrang.
Standaard zijn alle opsommingen typen en zijn hun velden constanten. Daarom kunnen de Shared
, Static
en ReadOnly
trefwoorden niet worden gebruikt bij het declareren van een opsomming of de bijbehorende leden.
Meerdere waarden toewijzen
Opsommingen vertegenwoordigen doorgaans wederzijds exclusieve waarden. Door het FlagsAttribute kenmerk in de Enum
declaratie op te slaan, kunt u in plaats daarvan meerdere waarden toewijzen aan een exemplaar van de opsomming. Het FlagsAttribute kenmerk geeft aan dat de opsomming wordt behandeld als een bitveld, dat wil gezegd, een set vlaggen. Deze worden bitsgewijze opsommingen genoemd.
Wanneer u een opsomming declareert met behulp van het FlagsAttribute kenmerk, wordt u aangeraden bevoegdheden van 2 te gebruiken, dat wil zeggen 1, 2, 4, 8, 16, enzovoort, voor de waarden. We raden ook aan dat Geen de naam is van een lid waarvan de waarde 0 is. Zie en Enumvoor aanvullende richtlijnenFlagsAttribute.
Voorbeeld 1
In het volgende voorbeeld ziet u hoe u de Enum
instructie gebruikt. Houd er rekening mee dat het lid wordt aangeduid als EggSizeEnum.Medium
, en niet als 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
Voorbeeld 2
De methode in het volgende voorbeeld valt buiten de Egg
klasse. EggSizeEnum
Daarom is het volledig gekwalificeerd 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
Voorbeeld 3
In het volgende voorbeeld wordt de Enum
instructie gebruikt om een gerelateerde set benoemde constante waarden te definiëren. In dit geval zijn de waarden kleuren die u kunt kiezen om formulieren voor gegevensinvoer voor een database te ontwerpen.
Public Enum InterfaceColors
MistyRose = &HE1E4FF&
SlateGray = &H908070&
DodgerBlue = &HFF901E&
DeepSkyBlue = &HFFBF00&
SpringGreen = &H7FFF00&
ForestGreen = &H228B22&
Goldenrod = &H20A5DA&
Firebrick = &H2222B2&
End Enum
Voorbeeld 4
In het volgende voorbeeld ziet u waarden die zowel positieve als negatieve getallen bevatten.
Enum SecurityLevel
IllegalEntry = -1
MinimumSecurity = 0
MaximumSecurity = 1
End Enum
Voorbeeld 5
In het volgende voorbeeld wordt een As
component gebruikt om de datatype
opsomming op te geven.
Public Enum MyEnum As Byte
Zero
One
Two
End Enum
Voorbeeld 6
In het volgende voorbeeld ziet u hoe u een bitwise opsomming gebruikt. Meerdere waarden kunnen worden toegewezen aan een exemplaar van een bitwise opsomming. De Enum
declaratie bevat het FlagsAttribute kenmerk, wat aangeeft dat de opsomming kan worden behandeld als een set vlaggen.
' 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
Voorbeeld 7
In het volgende voorbeeld wordt een opsomming herhaald. Hierbij wordt de GetNames methode gebruikt om een matrix met lidnamen op te halen uit de opsomming en GetValues om een matrix met lidwaarden op te halen.
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