Sdílet prostřednictvím


Enum – příkaz (Visual Basic)

Deklaruje výčet a definuje hodnoty jejích členů.

Syntaxe

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

Součástky

  • attributelist

    Nepovinné. Seznam atributů, které se vztahují na tento výčet. Seznam atributů musíte uzavřít do úhlových závorek ("<" a ">").

    Atribut FlagsAttribute označuje, že hodnota instance výčtu může obsahovat více členů výčtu a že každý člen představuje bitové pole v hodnotě výčtu.

  • accessmodifier

    Nepovinné. Určuje, jaký kód má přístup k tomuto výčtu. Může to být jedna z následujících možností:

  • Shadows

    Nepovinné. Určuje, že tento výčet předefinuje a skryje identicky pojmenovaný programovací prvek nebo sadu přetížených prvků v základní třídě. Stíny můžete zadat pouze v samotném výčtu, nikoli u žádného z jejích členů.

  • enumerationname

    Povinný: Název výčtu. Informace o platných názvech naleznete v tématu Deklarované názvy elementů.

  • datatype

    Nepovinné. Datový typ výčtu a všech jejích členů

  • memberlist

    Povinný: Seznam konstant členů deklarovaných v tomto příkazu Na jednotlivých řádcích zdrojového kódu se zobrazí více členů.

    Každá z nich member má následující syntaxi a části: [<attribute list>] member name [ = initializer ]

    Část Popis
    membername Požadováno. Jméno tohoto člena.
    initializer Nepovinné. Výraz vyhodnocený v době kompilace a přiřazený tomuto členu.
  • End Enum

    Ukončí Enum blok.

Poznámky

Pokud máte sadu neměnných hodnot, které spolu logicky souvisejí, můžete je definovat společně ve výčtu. To poskytuje smysluplné názvy výčtu a jejích členů, které jsou snadněji zapamatovatelné než jejich hodnoty. Potom můžete použít členy výčtu na mnoha místech v kódu.

Mezi výhody používání výčtů patří:

  • Snižuje chyby způsobené transponováním nebo chybným přepisem čísel.

  • Usnadňuje změnu hodnot v budoucnu.

  • Usnadňuje čtení kódu, což znamená, že je méně pravděpodobné, že se zavedou chyby.

  • Zajišťuje kompatibilitu vpřed. Pokud použijete výčty, bude váš kód méně pravděpodobně neúspěšný, pokud v budoucnu někdo změní hodnoty odpovídající názvům členů.

Výčet má název, podkladový datový typ a sadu členů. Každý člen představuje konstantu.

Výčet deklarovaný na úrovni třídy, struktury, modulu nebo rozhraní mimo jakoukoli proceduru je výčet členů. Je členem třídy, struktury, modulu nebo rozhraní, které ho deklaruje.

K výčtům členů lze přistupovat odkudkoli v rámci jejich třídy, struktury, modulu nebo rozhraní. Kód mimo třídu, strukturu nebo modul musí kvalifikovat název výčtu členů s názvem této třídy, struktury nebo modulu. Pokud do zdrojového souboru přidáte příkaz Imports , můžete se vyhnout nutnosti používat plně kvalifikované názvy.

Výčet deklarovaný na úrovni oboru názvů mimo libovolnou třídu, strukturu, modul nebo rozhraní je členem oboru názvů, ve kterém se zobrazuje.

Kontext deklarace pro výčet musí být zdrojový soubor, obor názvů, třída, struktura, modul nebo rozhraní a nemůže být procedurou. Další informace naleznete v tématu Kontexty deklarace a výchozí úrovně přístupu.

Atributy můžete použít u výčtu jako celku, ale ne na jeho členy jednotlivě. Atribut přispívá informace k metadatům sestavení.

Datový typ

Příkaz Enum může deklarovat datový typ výčtu. Každý člen přebírá datový typ výčtu. Můžete zadat Byte, , Integer, Long, SByte, ShortUInteger, , ULong, nebo UShort.

Pokud pro výčet nezadáte datatype , každý člen převezme datový typ jeho initializer. Pokud zadáte oba datatype a initializer, datový typ initializer musí být konvertibilní na datatype. Pokud ani datatype initializer není k dispozici, datový typ je výchozí hodnotou Integer.

Inicializace členů

Příkaz Enum může inicializovat obsah vybraných členů v memberlist. Slouží initializer k zadání výrazu, který má být přiřazen členovi.

Pokud pro člena nezadáte initializer , Visual Basic jej inicializuje buď na nulu (pokud je první member v memberlist), nebo na hodnotu větší o hodnotu větší než hodnota bezprostředně předcházející member.

Výraz zadaný v každém initializer může být libovolná kombinace literálů, dalších konstant, které jsou již definovány, a výčtové členy, které jsou již definovány, včetně předchozího člena tohoto výčtu. Ke kombinování těchto prvků můžete použít aritmetické a logické operátory.

Nelze použít proměnné nebo funkce v initializer. Můžete však použít klíčová slova převodu, například CByte a CShort. Můžete také použítAscW, pokud ji zavoláte konstantou nebo Char argumentemString, protože je možné ji vyhodnotit v době kompilace.

Výčty nemohou mít hodnoty s plovoucí desetinou čárkou. Pokud je člen přiřazena hodnota s plovoucí desetinou čárkou a Option Strict je nastavena na zapnuto, dojde k chybě kompilátoru. Pokud Option Strict je tato hodnota vypnutá, hodnota se automaticky převede na Enum typ.

Pokud hodnota člena překročí povolený rozsah podkladového datového typu nebo pokud inicializujete libovolný člen na maximální hodnotu povolenou podkladovým datovým typem, kompilátor hlásí chybu.

Modifikátory

Výčty členů třídy, struktury, modulu a rozhraní jsou výchozí pro veřejný přístup. Jejich úrovně přístupu můžete upravit pomocí modifikátorů přístupu. Výčty členů oboru názvů mají výchozí hodnotu pro přátelský přístup. Úrovně přístupu můžete upravit na veřejné, ale ne na soukromé nebo chráněné. Další informace naleznete v tématu Úrovně přístupu v jazyce Visual Basic.

Všichni členové výčtu mají veřejný přístup a v nich nemůžete použít žádné modifikátory přístupu. Pokud však samotný výčet má omezenější úroveň přístupu, má zadaná úroveň přístupu výčtu přednost.

Ve výchozím nastavení jsou všechny výčty typy a jejich pole jsou konstanty. SharedProto nelze použít , Statica ReadOnly klíčová slova při deklarování výčtu nebo jeho členů.

Přiřazení více hodnot

Výčty obvykle představují vzájemně se vylučující hodnoty. Zahrnutím atributu FlagsAttribute Enum do deklarace můžete místo toho přiřadit více hodnot instanci výčtu. Atribut FlagsAttribute určuje, že výčet se považuje za bitové pole, tj. sadu příznaků. Ty se nazývají bitové výčty.

Když deklarujete výčet pomocí atributu FlagsAttribute , doporučujeme pro hodnoty použít mocniny 2, tj. 1, 2, 4, 8, 16 atd. Doporučujeme také, aby "None" byl název člena, jehož hodnota je 0. Další pokyny najdete v tématu FlagsAttribute a Enum.

Příklad 1

Následující příklad ukazuje, jak použít Enum příkaz. Všimněte si, že člen je označován jako EggSizeEnum.Medium, a ne 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

Příklad 2

Metoda v následujícím příkladu Egg je mimo třídu. EggSizeEnum Proto je plně kvalifikovaný 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

Příklad 3

Následující příklad používá příkaz Enum k definování související sady pojmenovaných konstantních hodnot. V tomto případě jsou hodnoty barvy, které můžete zvolit k návrhu formulářů pro zadávání dat pro databázi.

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

Příklad 4

Následující příklad ukazuje hodnoty, které zahrnují kladná i záporná čísla.

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

Příklad 5

V následujícím příkladu As se klauzule používá k určení datatype výčtu.

Public Enum MyEnum As Byte
    Zero
    One
    Two
End Enum

Příklad 6

Následující příklad ukazuje, jak použít bitové výčty. K instanci bitového výčtu lze přiřadit více hodnot. Deklarace Enum obsahuje FlagsAttribute atribut, který označuje, že výčet lze považovat za sadu příznaků.

' 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

Příklad 7

Následující příklad iteruje prostřednictvím výčtu. Používá metodu GetNames k načtení pole názvů členů z výčtu a GetValues k načtení pole hodnot členů.

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

Viz také