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
attributelistNepovinný 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.
accessmodifierNepovinný parametr. Určuje, který kód má k tomuto výčtu přístup. Může to být jedna z následujících:
ShadowsNepovinný 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ů.
enumerationnamePovinná hodnota. Název výčtu. Informace o platných názvech naleznete v tématu deklarované názvy elementů.
datatypeNepovinný parametr. Datový typ výčtu a všech jeho členů.
memberlistPovinná 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á
memberz nich má následující syntaxi a části:[<attribute list>] member name [ = initializer ]Část Popis membernamePovinná hodnota. Název tohoto člena initializerNepovinný parametr. Výraz, který se vyhodnocuje v době kompilace a přiřazený k tomuto členovi. EndEnumUkončí
Enumblok.
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