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
, Short
UInteger
, , 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. Shared
Proto nelze použít , Static
a 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