Enum – příkaz (Visual Basic)

Deklaruje výčet a definuje hodnoty jeho členů.

Syntax

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

Součásti

  • attributelist

    Nepovinný parametr. Seznam atributů, které se vztahují k tomuto výčtu. Seznam atributů musíte uzavřít do lomených závorek (" < " a " > ").

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

  • accessmodifier

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

  • Shadows

    Nepovinný parametr. Určuje, že tento výčet znovu deklaruje a skryje identicky pojmenovaný prvek programování nebo sadu přetížených prvků v základní třídě. Stíny lze zadat pouze pro samotný výčet, nikoli na žádném z jeho členů.

  • enumerationname

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

  • datatype

    Nepovinný parametr. Datový typ výčtu a všech jeho členů.

  • memberlist

    Povinná hodnota. Seznam konstant členů, které jsou deklarovány v tomto příkazu. Na jednotlivých řádcích zdrojového kódu se zobrazí více členů.

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

    Část Popis
    membername Povinná hodnota. Název tohoto člena
    initializer Nepovinný parametr. Výraz, který se vyhodnocuje v době kompilace a přiřazený k tomuto členovi.
  • End Enum

    Ukončí Enum blok.

Poznámky

Máte-li sadu nezměněných hodnot, které jsou logicky vzájemně propojeny, můžete je definovat společně ve výčtu. To poskytuje smysluplné názvy pro výčet a jeho členy, které je snazší pamatovat než jejich hodnoty. Pak můžete použít členy výčtu na mnoha místech v kódu.

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

  • Snižuje chyby způsobené přetypováním nebo nesprávným zadáním čísel.

  • V budoucnu usnadňuje změnu hodnot.

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

  • Zajišťuje dopředné kompatibility. Pokud použijete výčty, váš kód je méně pravděpodobný, pokud v budoucnu někdo změní hodnoty odpovídající názvům členů.

Výčet má název, základní 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é je deklaruje.

K výčtům členů lze přistupovat odkudkoli v rámci své 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. Je možné vyhnout se nutnosti používat plně kvalifikované názvy přidáním příkazu Imports do zdrojového souboru.

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

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

Můžete použít atributy na výčet jako celek, ale nikoli na jeho členy jednotlivě. Atribut přispívá informace k metadatům sestavení.

Typ dat

EnumPříkaz může deklarovat datový typ výčtu. Každý člen získá datový typ výčtu. Můžete zadat Byte , Integer , Long , SByte , Short , UInteger , ULong , nebo UShort .

Pokud pro výčet neurčíte datatype , každý člen získá datový typ svého initializer . Pokud zadáte obojí datatype a initializer , datový typ initializer musí být převoditelné na datatype . V případě datatype initializer , že není k dispozici ani, je výchozím datovým typem Integer .

Inicializace členů

EnumPříkaz může inicializovat obsah vybraných členů v memberlist . Použijete initializer k poskytnutí výrazu, který má být přiřazen členu.

pokud pro člena neurčíte initializer , Visual Basic inicializuje buď na nulu (pokud se jedná o první member v memberlist ), nebo na hodnotu větší od jedné, než je bezprostředně předchozí member .

Výraz zadaný v každém z nich initializer může být libovolná kombinace literálů, dalších konstant, které jsou již definovány, a členů výčtu, kteří jsou již definováni, včetně předchozího člena tohoto výčtu. K kombinování takových prvků lze použít aritmetické a logické operátory.

V nástroji nelze použít proměnné nebo funkce initializer . Můžete však použít klíčová slova převodu, jako je CByte a CShort . Můžete také použít, AscW Pokud je volána s konstantou String nebo Char argumentem, protože lze vyhodnotit v době kompilace.

Výčty nemůžou mít hodnoty s plovoucí desetinnou čárkou. Pokud je členovi přiřazena hodnota s plovoucí desetinnou čárkou a Option Strict je nastavena na hodnotu on, dojde k chybě kompilátoru. Pokud Option Strict je hodnota vypnuta, hodnota je automaticky převedena na Enum typ.

Pokud hodnota členu překročí povolený rozsah pro základní datový typ, nebo Pokud inicializujete libovolného člena na maximální hodnotu povolenou podkladovým datovým typem, kompilátor ohlásí chybu.

Modifikátory

Výčet členů třídy, struktury, modulu a rozhraní je ve výchozím nastavení veřejným přístupem. Můžete upravit jejich úrovně přístupu modifikátory přístupu. Výčty členů oboru názvů mají ve výchozím nastavení přístup typu Friend. Úrovně přístupu můžete upravit na veřejné, ale ne na privátní nebo chráněné. Další informace najdete v tématu úrovně přístupu v Visual Basic.

Všichni členové výčtu mají veřejný přístup a nemůžete použít žádné modifikátory přístupu. Nicméně pokud má výčet vlastní úroveň přístupu s vyšší úrovní oprávnění, má zadaná úroveň přístupu ke výčtu přednost.

Ve výchozím nastavení jsou všechny výčty typy a jejich pole jsou konstanty. Shared Static ReadOnly Klíčová slova, a nelze proto použít při deklaraci výčtu nebo jejích členů.

Přiřazení více hodnot

Výčty typicky znázorňují vzájemně se vylučující hodnoty. Zahrnutím FlagsAttribute atributu do Enum deklarace můžete místo toho přiřadit více hodnot instanci výčtu. FlagsAttributeAtribut určuje, že výčet bude zpracován jako bitové pole, tedy sada příznaků. Tyto jsou označovány jako bitové výčty.

Pokud deklarujete výčet pomocí FlagsAttribute atributu, doporučujeme pro tyto hodnoty použít mocniny 2, to znamená 1, 2, 4, 8, 16 a tak dále. Doporučujeme také, aby "žádný" byl název členu, jehož hodnota je 0. Další pokyny naleznete v tématech 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 nikoli 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 je mimo Egg třídu. Proto EggSizeEnum 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á Enum příkaz k definování související sady pojmenovaných hodnot konstant. V tomto případě hodnoty jsou barvy, které můžete zvolit pro návrh 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é obsahují 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 je použita klauzule 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ýčet. K instanci bitového výčtu lze přiřadit více hodnot. EnumDeklarace 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 prochází výčet. Používá GetNames metodu 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é