Оператор Enum (Visual Basic)
Объявляет перечисление и определяет значения его элементов.
[ <attributelist> ] [ accessmodifier ] [ Shadows ]
Enum enumerationname [ As datatype ]
memberlist
End Enum
Части
Часть |
Описание |
attributelist |
Необязательный.Список атрибутов, применяемых для данного перечисления.Необходимо заключить список атрибутов в угловые скобки ("<"и">"). FlagsAttribute Атрибут указывает, что значение экземпляра перечисления может включать несколько членов перечисления и что каждый элемент представляет битового поля в значение перечисления. |
accessmodifier |
Необязательный.Указывает, что код может получить доступ к этому перечислению.Может принимать следующие значения: Можно задать ProtectedFriend, который разрешает доступ из кода внутри класса перечисления, производного класса или сборки. |
Shadows |
Необязательный.Определяет, что данное перечисление повторно объявляет и скрывает идентично именованный элемент программирования или набор перегружаемых элементов в базовом классе.Можно задать Shadows только на самом перечислении, а не на каком-либо из его элементов. |
enumerationname |
Обязательный.Имя перечисления.Допустимые имена см. в разделе Имена объявленных типов (Visual Basic). |
datatype |
Необязательный.Тип данных перечисления и всех его элементов. |
memberlist |
Обязательный.Список констант элементов, объявляемых в этом операторе.Несколько элементов отображаются на отдельных строках исходного кода. Каждый member имеет следующие синтаксис и компоненты: [<attribute list>] member name [ = initializer ]
ЧастьОписание
membername Обязательный.Имя данного элемента.
initializer Необязательный.Выражение, которое вычисляется во время компиляции и присваивается этому элементу.
|
EndEnum |
Завершает блок Enum. |
Заметки
Если имеется набор неизменных значений, логически связанных друг с другом, можно определить их вместе в перечислении.Это позволяет присвоить перечислению и его элементам осмысленные имена, которые легче запомнить, чем их значения.Затем можно использовать элементы перечисления во многих местах в коде.
Преимущества использования перечисления включают следующее:
Уменьшение ошибок, вызванных перемещением или неправильным вводом значений.
Упрощение будущего изменения значений.
Делает код более удобным для чтения, что означает, что менее вероятно, будет представлена ошибок.
Обеспечение прямой совместимости.При использовании перечисления вероятность того, что, если в будущем кто-то изменяет значения, соответствующие имена элементов в коде.
Перечисления имеет имя, базовый тип данных и набор элементов.Каждый член представляет константу.
Перечисление, объявленное на уровне класса, структуры, модуля или интерфейса, вне любой процедуры, член перечисления.Он является членом класса, структуры, модуля или интерфейса, объявляющего его.
Член перечисления может осуществляться из любого места в пределах их класса, структуры, модуля или интерфейса.Код вне класса, структуры или модуля необходимо определять с помощью имени перечисления элементов с именем этого класса, структуры или модуля.Можно избежать необходимости использования полных имен, добавляя импорта оператора в исходном файле.
Перечисление, объявленное на уровне пространства имен вне класса, структуры, модуля или интерфейса, является членом пространства имен, в которой он находится.
Контекст объявления для перечисления должен быть исходным файлом, пространства имен, класса, структуры, модуля или интерфейса, не может быть процедурой.Дополнительные сведения см. в разделе Контексты объявления и уровни доступа по умолчанию (Visual Basic).
Можно применять атрибуты ко всему перечислению, но не к его отдельным элементам.Атрибут вносит сведения в метаданные сборки.
Тип данных
В операторе Enum можно объявлять тип данных перечисления.Каждый элемент принимает тип данных перечисления.Можно указать Byte, Integer, Long, SByte, Short, UInteger, ULong или UShort.
Если не указан datatype для перечисления, каждый элемент принимает тип данных его initializer.Если задан и datatype и initializer, тип данных initializer должен быть преобразован к datatype.Если отсутствует и datatype, и initializer, по умолчанию типом данных является Integer.
Инициализация элементов
Оператор Enum может инициализировать содержимое выбранных элементов в memberlist.initializer позволяет указать выражение, которое необходимо назначить элементу.
Если для элемента не указан initializer, Visual Basic инициализирует его как ноль (если он является первым member в memberlist), или как значение, превышающее предыдущий member на единицу.
Выражение, поставляемое в каждом initializer, может быть любым сочетанием литералов, других определенных констант и элементов перечисления, включая предыдущий элемент данного перечисления.Для комбинирования этих элементов можно использовать арифметические и логические операторы.
Нельзя использовать переменные или функции в initializer.Однако можно использовать ключевые слова преобразования, такие как CByte и CShort.Также можно использовать функцию AscW для вызова с постоянными аргументами типа String или Char, поскольку ее значение может быть вычислено во время компиляции.
Перечисления не могут иметь значений с плавающей точкой.Если член присваивается значение с плавающей запятой и Option Strict присваивается значение, возникает ошибка компилятора.Если Option Strict имеет значение off, значение автоматически преобразуется в Enum типа.
Если значение члена превосходит верхнюю границу для используемого типа данных или начальное значение какого-либо члена устанавливается равным наиболее допустимому значению для используемого типа данных, компилятор выводит сообщение об ошибке.
Модификаторы
Класс, структура, модуль и интерфейс элемента перечисления по умолчанию в режиме доступа PUBLIC.Уровни доступа можно настроить с помощью модификаторов доступа.Элементы перечисления пространства имен по умолчанию находятся в режиме доступа FRIEND.Можно изменить уровни доступа на PUBLIC, но не на PRIVATE или PROTECTED.Дополнительные сведения см. в разделе Уровни доступа в Visual Basic.
Все элементы перечисления имеют уровень доступа PUBLIC и к ним нельзя применять какие-либо модификаторы.Однако если перечисление само имеет более ограниченный уровень доступа, указанный уровень доступа перечисления имеет более высокий приоритет.
По умолчанию все перечисления являются типами и их поля являются константами.Таким образом, ключевые слова SharedStatic и ReadOnly нельзя использовать при объявлении перечисления или его элементов.
Назначение нескольких значений
Перечисления обычно представляют собой взаимоисключающие значения.В том числе FlagsAttribute атрибут в Enum объявление, можно вместо этого назначить несколько значений экземпляра перечисления.FlagsAttribute Атрибут указывает, что перечисление рассматриваться как битовое поле, то есть набор флагов.Они называются побитовое перечисления.
При объявлении перечисления с помощью FlagsAttribute атрибут, мы рекомендуем использовать значения степени числа 2, т.е., 1, 2, 4, 8, 16 и т. д.Также рекомендуется «None» имя элемента, значение которого равно 0.Дополнительные инструкции см. FlagsAttribute и Enum.
Пример
В этом примере показано, как использовать Enum инструкции.Обратите внимание, что элемент называется EggSizeEnum.Medium, а не как 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
В следующем примере метод выходит за пределы Egg класса.Таким образом EggSizeEnum является полным, как 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
В следующем примере оператор Enum используется для определения связанного набора значений именованных констант.В данном случае значения представляют собой цвета, которые можно выбрать для создаваемых форм ввода информации в базу данных.
Public Enum InterfaceColors
MistyRose = &HE1E4FF&
SlateGray = &H908070&
DodgerBlue = &HFF901E&
DeepSkyBlue = &HFFBF00&
SpringGreen = &H7FFF00&
ForestGreen = &H228B22&
Goldenrod = &H20A5DA&
Firebrick = &H2222B2&
End Enum
Значения элементов перечислений могут быть как положительными, так и отрицательными, как показано в следующем примере:
Enum SecurityLevel
IllegalEntry = -1
MinimumSecurity = 0
MaximumSecurity = 1
End Enum
В следующем примере As предложении используется для указания datatype перечисления.
Public Enum MyEnum As Byte
Zero
One
Two
End Enum
Следующий пример показывает, как использование поразрядной перечисления.Экземпляр побитового перечисления может быть присвоено несколько значений.Enum Объявление включает FlagsAttribute атрибут, который указывает, что перечисление может рассматриваться как набор флагов.
' 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
В этом примере выполняется итерация по перечисления.Он использует GetNames метод для извлечения массива имен элементов из перечисления, и GetValues для извлечения массива значений.
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
См. также
Ссылки
Функции преобразования типов (Visual Basic)