Поделиться через


Оператор 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

См. также

Ссылки

Enum

Оператор Const (Visual Basic)

Оператор Dim (Visual Basic)

Функции преобразования типов (Visual Basic)

AscW

Основные понятия

Явные и неявные преобразования (Visual Basic)

Константы и перечисления (Visual Basic)