Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Deklaruje wyliczenie i definiuje wartości jego elementów członkowskich.
Składnia
[ <attributelist> ] [ accessmodifier ] [ Shadows ]
Enum enumerationname [ As datatype ]
memberlist
End Enum
Części
attributelistOpcjonalny. 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.
accessmodifierOpcjonalny. Określa, jaki kod może uzyskać dostęp do tego wyliczenia. Może być jednym z następujących elementów:
ShadowsOpcjonalny. 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.
enumerationnameTo jest wymagane. Nazwa wyliczenia. Aby uzyskać informacje na temat prawidłowych nazw, zobacz Deklarowane nazwy elementów.
datatypeOpcjonalny. Typ danych wyliczenia i wszystkich jego elementów członkowskich.
memberlistTo jest wymagane. 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
memberma następującą składnię i części:[<attribute list>] membername [ = initializer ]Część Opis membernameTo jest wymagane. Nazwa tego elementu członkowskiego. initializerOpcjonalny. Wyrażenie obliczane w czasie kompilacji i przypisane do tego elementu członkowskiego. EndEnumEnumPrzerywa 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, LongSByteShortUIntegerULonglub .UShort
Jeśli nie określisz datatype wyliczenia, każdy element członkowski przyjmuje typ danych .initializer Jeśli określisz wartości i datatypeinitializer, typ initializer danych musi być konwertowany na datatypewartość . Jeśli ani datatypeinitializer 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 memberlistelemencie ) 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 Sharedtym słowa kluczowe , Statici 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 FlagsAttributeEnum 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