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

Объявляет перечисление и определяет значения его членов.

Синтаксис

[ <attributelist> ] [ accessmodifier ]  [ Shadows ]
Enum enumerationname [ As datatype ]
   memberlist
End Enum

Компоненты

  • attributelist

    Необязательный элемент. Список атрибутов, применяемых к этому перечислению. Необходимо заключить список атрибутов в угловые скобки ("<" и ">").

    Атрибут FlagsAttribute указывает, что значение экземпляра перечисления может включать несколько элементов перечисления, а каждый элемент представляет битовое поле в значении перечисления.

  • accessmodifier

    Необязательный элемент. Указывает, какой код может получить доступ к этому перечислению. Может применяться один из перечисленных ниже типов.

  • Shadows

    Необязательный элемент. Указывает, что это перечисление повторяется и скрывает идентичный именованный элемент программирования или набор перегруженных элементов в базовом классе. Вы можете указать тени только в самом перечислении, а не на каких-либо его членах.

  • enumerationname

    Обязательный. Имя перечисления. Сведения о допустимых именах см. в разделе "Объявленные имена элементов".

  • datatype

    Необязательный элемент. Тип данных перечисления и всех его членов.

  • memberlist

    Обязательный. Список констант элементов, объявленных в этом операторе. Несколько элементов отображаются в отдельных строках исходного кода.

    Каждый member из них имеет следующий синтаксис и части: [<attribute list>] member name [ = initializer ]

    Часть Описание
    membername Обязательный. Имя этого элемента.
    initializer Необязательный элемент. Выражение, вычисляемое во время компиляции и назначенное этому члену.
  • End Enum

    Завершает блок Enum.

Remarks

Если у вас есть набор изменяющихся значений, логически связанных друг с другом, их можно определить вместе в перечислении. Это предоставляет значимые имена для перечисления и его членов, которые легче запоминать, чем их значения. Затем можно использовать элементы перечисления во многих местах в коде.

Ниже перечислены преимущества использования перечислений.

  • Уменьшает количество ошибок, вызванных транспонированием или неправильным числом.

  • упрощает изменение значений в будущем;

  • Упрощает чтение кода. Это означает, что вероятность появления ошибок будет меньшей вероятностью.

  • обеспечивает прямую совместимость. Если вы используете перечисления, ваш код, скорее всего, завершится ошибкой, если в будущем кто-то изменит значения, соответствующие именам членов.

Перечисление имеет имя, базовый тип данных и набор элементов. Каждый элемент представляет константу.

Перечисление, объявленное на уровне класса, структуры, модуля или интерфейса вне любой процедуры, является перечислением элементов. Он является членом класса, структуры, модуля или интерфейса, который объявляет его.

Перечисления членов можно получить из любого места в пределах своего класса, структуры, модуля или интерфейса. Код за пределами класса, структуры или модуля должен квалифицировать имя перечисления элементов с именем этого класса, структуры или модуля. Чтобы избежать необходимости использовать полные имена, добавьте инструкцию Imports в исходный файл.

Перечисление, объявленное на уровне пространства имен, за пределами любого класса, структуры, модуля или интерфейса, является членом пространства имен, в котором он отображается.

Контекст объявления для перечисления должен быть исходным файлом, пространством имен, классом, структурой, модулем или интерфейсом и не может быть процедурой. Дополнительные сведения см. в разделе Контексты объявления и уровни доступа по умолчанию.

Атрибуты можно применять к перечислению в целом, но не к его членам по отдельности. Атрибут вносит информацию в метаданные сборки.

Тип данных

Инструкция Enum может объявлять тип данных перечисления. Каждый элемент принимает тип данных перечисления. Можно указать Byte, , Integer, , ShortLongSByte, , UIntegerили ULongUShort.

Если для перечисления не указано datatype , каждый элемент принимает тип данных его initializer. Если указано и то datatype , и initializerдругое initializer , тип данных должен быть преобразован в datatype. Если ни initializer нетdatatype, тип данных по умолчанию имеет значение Integer.

Инициализация элементов

Инструкция Enum может инициализировать содержимое выбранных элементов в memberlist. Используется для initializer предоставления выражения, назначаемого члену.

Если для элемента не указаноinitializer, Visual Basic инициализирует его либо до нуля (если оно является первым member вmemberlist), либо значением, превышающим значение, превышающее указанное вышеmember.

Выражение, предоставленное в каждом из них initializer , может быть любым сочетанием литерала, других констант, которые уже определены, и элементов перечисления, которые уже определены, включая предыдущий член этого перечисления. Для объединения таких элементов можно использовать арифметические и логические операторы.

Нельзя использовать переменные или функции в initializer. Однако можно использовать ключевые слова преобразования, такие как CByte и CShort. Вы также можете использовать AscW его при вызове с константой String или Char аргументом, так как это можно оценить во время компиляции.

Перечисления не могут иметь значения с плавающей запятой. Если члену назначено значение с плавающей запятой и Option Strict задано значение on, возникает ошибка компилятора. Если Option Strict значение отключено, значение автоматически преобразуется в Enum тип.

Если значение элемента превышает допустимый диапазон для базового типа данных или если инициализировать любой элемент до максимального значения, разрешенного базовым типом данных, компилятор сообщает об ошибке.

Модификаторы

Перечисления элементов класса, структуры, модуля и интерфейса по умолчанию доступны для общего доступа. Их уровни доступа можно настроить с помощью модификаторов доступа. Перечисления элементов пространства имен по умолчанию доступны для друга. Уровни доступа можно настроить на общедоступный, но не на закрытый или защищенный. Дополнительные сведения см. в разделе "Уровни доступа" в Visual Basic.

Все члены перечисления имеют открытый доступ, и в них нельзя использовать модификаторы доступа. Однако если сам перечисление имеет более ограниченный уровень доступа, указанный уровень доступа перечисления имеет приоритет.

По умолчанию все перечисления являются типами и их полями являются константами. Поэтому ключевые SharedStaticслова и ReadOnly ключевые слова нельзя использовать при объявлении перечисления или его членов.

Назначение нескольких значений

Перечисления обычно представляют взаимоисключающие значения. FlagsAttribute Добавив атрибут в Enum объявление, можно назначить несколько значений экземпляру перечисления. Атрибут FlagsAttribute указывает, что перечисление обрабатывается как битовое поле, то есть набор флагов. Они называются побитовые перечисления.

При объявлении перечисления с помощью атрибута FlagsAttribute рекомендуется использовать значения 2, то есть 1, 2, 4, 8, 16 и т. д. Кроме того, рекомендуется, чтобы "None" было именем члена, значение которого равно 0. Дополнительные рекомендации см. в разделе FlagsAttribute и Enum.

Пример 1

В следующем примере показано использование оператора 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

Пример 2

Метод в следующем примере находится за пределами 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

Пример 3

В следующем примере оператор используется Enum для определения связанного набора именованных значений констант. В этом случае значения — это цвета, которые можно выбрать для разработки форм ввода данных для базы данных.

Public Enum InterfaceColors
    MistyRose = &HE1E4FF&
    SlateGray = &H908070&
    DodgerBlue = &HFF901E&
    DeepSkyBlue = &HFFBF00&
    SpringGreen = &H7FFF00&
    ForestGreen = &H228B22&
    Goldenrod = &H20A5DA&
    Firebrick = &H2222B2&
End Enum

Пример 4

В следующем примере показаны значения, включающие как положительные, так и отрицательные числа.

Enum SecurityLevel
    IllegalEntry = -1
    MinimumSecurity = 0
    MaximumSecurity = 1
End Enum

Пример 5

В следующем примере As предложение используется для указания datatype перечисления.

Public Enum MyEnum As Byte
    Zero
    One
    Two
End Enum

Пример 6

В следующем примере показано, как использовать побитовое перечисление. Несколько значений можно назначить экземпляру побитового перечисления. Объявление 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

Пример 7

В следующем примере выполняется итерирование перечисления. Он использует 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

См. также раздел