Enum — Instrukcja (Visual Basic)
Deklaruje wyliczenie i definiuje wartości jego elementów członkowskich.
Składnia
[ <attributelist> ] [ accessmodifier ] [ Shadows ]
Enum enumerationname [ As datatype ]
memberlist
End Enum
generatora
attributelist
Opcjonalny. Lista atrybutów, które mają zastosowanie do tego wyliczenia. Należy ująć listę atrybutów w nawiasach kątowych ("
<
" i ">
").Atrybut FlagsAttribute wskazuje, że wartość wystąpienia wyliczenia może zawierać wiele elementów członkowskich wyliczenia, a każdy element członkowski reprezentuje pole bitowe w wartości wyliczenia.
accessmodifier
Opcjonalny. Określa, jaki kod może uzyskać dostęp do tego wyliczenia. Może być jednym z następujących elementów:
Shadows
Opcjonalny. Określa, że ta wyliczenie redecyduje i ukrywa identycznie nazwany element programowania lub zestaw przeciążonych elementów w klasie bazowej. Można określić tylko cienie w samym wyliczeniu, a nie na żadnym z jego elementów członkowskich.
enumerationname
Wymagany. Nazwa wyliczenia. Aby uzyskać informacje na temat prawidłowych nazw, zobacz Deklarowane nazwy elementów.
datatype
Opcjonalny. Typ danych wyliczenia i wszystkich jego elementów członkowskich.
memberlist
Wymagany. Lista stałych składowych zadeklarowanych w tej instrukcji. Wiele elementów członkowskich jest wyświetlanych w poszczególnych wierszach kodu źródłowego.
Każda z nich
member
ma następującą składnię i części:[<attribute list>] member name [ = initializer ]
Element opis membername
Wymagane. Nazwa tego elementu członkowskiego. initializer
Opcjonalny. Wyrażenie obliczane w czasie kompilacji i przypisane do tego elementu członkowskiego. End
Enum
Enum
Przerywa blok.
Uwagi
Jeśli masz zestaw niezmiennych wartości, które są logicznie powiązane ze sobą, możesz je zdefiniować razem w wyliczenie. Zapewnia to znaczące nazwy wyliczenia i jego składowych, które są łatwiejsze do zapamiętania niż ich wartości. Następnie możesz użyć elementów członkowskich wyliczenia w wielu miejscach w kodzie.
Korzyści wynikające z używania wyliczenia obejmują następujące elementy:
Zmniejsza błędy spowodowane transponowaniem lub mistypingiem liczb.
Ułatwia zmianę wartości w przyszłości.
Ułatwia odczytywanie kodu, co oznacza, że jest mniej prawdopodobne, że zostaną wprowadzone błędy.
Zapewnia zgodność z przyszłością. Jeśli używasz wyliczenia, kod jest mniej prawdopodobny, jeśli w przyszłości ktoś zmieni wartości odpowiadające nazwom elementów członkowskich.
Wyliczenie ma nazwę, podstawowy typ danych i zestaw elementów członkowskich. Każdy element członkowski reprezentuje stałą.
Wyliczenie zadeklarowane na poziomie klasy, struktury, modułu lub interfejsu poza dowolną procedurą jest wyliczeniem składowym. Jest to element członkowski klasy, struktury, modułu lub interfejsu, który go deklaruje.
Dostęp do wyliczenia składowych można uzyskać z dowolnego miejsca w swojej klasie, strukturze, module lub interfejsie. Kod poza klasą, strukturą lub modułem musi kwalifikować nazwę wyliczenia składowego z nazwą tej klasy, struktury lub modułu. Można uniknąć konieczności używania w pełni kwalifikowanych nazw, dodając instrukcję Import do pliku źródłowego.
Wyliczenie zadeklarowane na poziomie przestrzeni nazw poza dowolną klasą, strukturą, modułem lub interfejsem jest elementem członkowskim przestrzeni nazw, w której się pojawia.
Kontekst deklaracji dla wyliczenia musi być plikiem źródłowym, przestrzenią nazw, klasą, strukturą, modułem lub interfejsem i nie może być procedurą. Aby uzyskać więcej informacji, zobacz Konteksty deklaracji i Domyślne poziomy dostępu.
Atrybuty można zastosować do wyliczenia jako całości, ale nie do jego składowych indywidualnie. Atrybut współtworzy informacje o metadanych zestawu.
Typ danych
Instrukcja Enum
może zadeklarować typ danych wyliczenia. Każdy element członkowski przyjmuje typ danych wyliczenia. Można określić Byte
, , Integer
, Long
UInteger
ULong
SByte
Short
lub .UShort
Jeśli nie określisz datatype
wyliczenia, każdy element członkowski przyjmuje typ danych .initializer
Jeśli określisz wartości i datatype
initializer
, typ initializer
danych musi być konwertowany na datatype
wartość . Jeśli ani datatype
initializer
nie istnieje, typ danych jest domyślnie ustawiona na Integer
.
Inicjowanie elementów członkowskich
Instrukcja Enum
może zainicjować zawartość wybranych elementów członkowskich w pliku memberlist
. initializer
Służy do podawania wyrażenia, które ma zostać przypisane do elementu członkowskiego.
Jeśli nie określisz initializer
elementu członkowskiego, program Visual Basic inicjuje go do zera (jeśli jest to pierwszy member
w memberlist
elemencie ) lub do wartości większej o jedną niż bezpośrednio poprzednia member
.
Wyrażenie podane w każdym initializer
z nich może być dowolną kombinacją literałów, innych stałych, które są już zdefiniowane, oraz składowych wyliczania, w tym poprzedniego elementu członkowskiego tego wyliczenia. Aby połączyć takie elementy, można użyć operatorów arytmetycznych i logicznych.
Nie można używać zmiennych ani funkcji w programie initializer
. Można jednak użyć słów kluczowych konwersji, takich jak CByte
i CShort
. Można również użyć AscW
metody w przypadku wywołania jej ze stałą String
lub Char
argumentem, ponieważ można ją ocenić w czasie kompilacji.
Wyliczenia nie mogą mieć wartości zmiennoprzecinkowych. Jeśli element członkowski ma przypisaną wartość zmiennoprzecinkową i Option Strict
jest ustawiony na wartość on, wystąpi błąd kompilatora. Jeśli Option Strict
wartość jest wyłączona, wartość jest automatycznie konwertowana na Enum
typ.
Jeśli wartość elementu członkowskiego przekracza dozwolony zakres dla bazowego typu danych lub jeśli zainicjujesz dowolny element członkowski do maksymalnej wartości dozwolonej przez bazowy typ danych, kompilator zgłasza błąd.
Modyfikatory
Wyliczenia składowe klasy, struktury, modułu i interfejsu są domyślnie dostępne publicznie. Możesz dostosować ich poziomy dostępu za pomocą modyfikatorów dostępu. Wyliczenia elementów członkowskich przestrzeni nazw są domyślnie dostępne dla znajomych. Możesz dostosować ich poziomy dostępu do publicznej wiadomości, ale nie do prywatnych lub chronionych. Aby uzyskać więcej informacji, zobacz Poziomy dostępu w Visual Basic.
Wszyscy członkowie wyliczania mają dostęp publiczny i nie można na nich używać żadnych modyfikatorów dostępu. Jeśli jednak sam wyliczenie ma bardziej ograniczony poziom dostępu, określony poziom dostępu wyliczania ma pierwszeństwo.
Domyślnie wszystkie wyliczenia są typami, a ich pola są stałymi. W związku z Shared
tym słowa kluczowe , Static
i ReadOnly
nie mogą być używane podczas deklarowania wyliczenia lub jego elementów członkowskich.
Przypisywanie wielu wartości
Wyliczenia zwykle reprezentują wzajemnie wykluczające się wartości. Po uwzględnieniu atrybutu FlagsAttribute Enum
w deklaracji można zamiast tego przypisać wiele wartości do wystąpienia wyliczenia. Atrybut FlagsAttribute określa, że wyliczenie ma być traktowane jako pole bitowe, czyli zestaw flag. Są to nazywane wyliczeniami bitowymi .
W przypadku deklarowania wyliczenia przy użyciu atrybutu FlagsAttribute zalecamy użycie uprawnień 2, czyli 1, 2, 4, 8, 16 itd. dla wartości. Zalecamy również, aby parametr "None" był nazwą elementu członkowskiego, którego wartość to 0. Aby uzyskać dodatkowe wytyczne, zobacz FlagsAttribute i Enum.
Przykład 1
W poniższym przykładzie pokazano, jak używać instrukcji Enum
. Należy pamiętać, że element członkowski jest określany jako EggSizeEnum.Medium
, a nie 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
Przykład 2
Metoda w poniższym przykładzie znajduje się poza klasą Egg
. W związku z EggSizeEnum
tym jest w pełni kwalifikowany 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
Przykład 3
W poniższym przykładzie użyto instrukcji Enum
, aby zdefiniować powiązany zestaw nazwanych wartości stałych. W takim przypadku wartości to kolory, które można wybrać do projektowania formularzy wprowadzania danych dla bazy danych.
Public Enum InterfaceColors
MistyRose = &HE1E4FF&
SlateGray = &H908070&
DodgerBlue = &HFF901E&
DeepSkyBlue = &HFFBF00&
SpringGreen = &H7FFF00&
ForestGreen = &H228B22&
Goldenrod = &H20A5DA&
Firebrick = &H2222B2&
End Enum
Przykład 4
W poniższym przykładzie przedstawiono wartości, które zawierają zarówno liczby dodatnie, jak i ujemne.
Enum SecurityLevel
IllegalEntry = -1
MinimumSecurity = 0
MaximumSecurity = 1
End Enum
Przykład 5
W poniższym przykładzie klauzula As
służy do określania datatype
wyliczenia.
Public Enum MyEnum As Byte
Zero
One
Two
End Enum
Przykład 6
W poniższym przykładzie pokazano, jak używać wyliczenia bitowego. Do wystąpienia wyliczenia bitowego można przypisać wiele wartości. Deklaracja Enum
zawiera FlagsAttribute atrybut, który wskazuje, że wyliczenie może być traktowane jako zestaw flag.
' 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
Przykład 7
Poniższy przykład iteruje wyliczenie. Używa GetNames metody , aby pobrać tablicę nazw elementów członkowskich z wyliczenia i GetValues pobrać tablicę wartości składowych.
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