Delen via


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 ULongUShort.

Als u niet opgeeft datatype voor de opsomming, neemt elk lid het gegevenstype van initializerde 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 memberlistinitialiseren. 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 memberlistis), of op een waarde die groter is dan die van de direct voorafgaande memberwaarde.

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, Staticen 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

Zie ook