Enum 语句 (Visual Basic)

声明一个枚举并定义其成员的值。

[ <attribute list> ] [ access modifier ]  [ Shadows ] 
Enum enumeration name [ As data type ] 
   member list
End Enum

部件

组成部分

说明

attribute list

可选。 应用于此枚举的特性列表。 特性列表必须用尖括号(“<”和“>”)括起来。

access modifier

可选。 指定哪个代码可以访问此枚举。 可以是如下内容之一:

您可以指定 Protected Friend,以便从此枚举的类、某个派生类或同一程序集中的代码进行访问。

Shadows

可选。 指定该枚举重新声明并隐藏基类中的同名编程元素或重载元素集。 可以只对枚举本身而不对其任何成员指定 Shadows

enumeration name

必选。 枚举名。 有关有效名称的信息,请参见 已声明的元素名称 (Visual Basic)

data type

可选。 枚举及其所有成员的数据类型。

member list

必选。 在此语句中声明的成员常数的列表。 在单个源代码行上显示多个成员。

每个 member 均有下列语法和部分:[<attribute list>] member name [ = initializer ]

组成部分说明
member name 必选。此成员的名称。
initializer 可选。先在编译时计算然后分配给此成员的表达式。

End Enum

终止 Enum 块。

备注

如果您有一组逻辑上彼此相关的不变值,则可以在一个枚举中一起定义这些值。 这为该枚举及其成员提供了有意义的名称,这些名称比它们的值更容易记忆。 然后,您可以在代码中的多个位置使用这些枚举成员。 这还会改进代码的可读性,因为所有相关值都使用同一枚举名称。

您只能在命名空间或模块级别使用 Enum。 这意味着枚举的声明上下文必须是源文件、命名空间、类、结构、模块或接口,不能是过程。 有关更多信息,请参见声明上下文和默认访问级别 (Visual Basic)

Enum 语句可以声明枚举的数据类型。 每个成员都采用相应枚举的数据类型。 您可以指定 Byte、Integer、Long、SByte、Short、UInteger、ULong 或 UShort。

如果没有为成员指定 initializer,Visual Basic 会将其初始化为零(如果它是 member list 中的第一个 member),或初始化为比 member 的前一个值大 1 的值。

类、结构、模块和接口成员枚举默认为公共访问。 可以使用访问修饰符来调整它们的访问级别。 命名空间成员枚举默认为 friend 访问。 可以将这些枚举的访问级别调整为 public,但不能调整为 private 或 protected。 有关更多信息,请参见 Visual Basic 中的访问级别。规则

  • **声明上下文。**在任何过程之外的模块级别声明的枚举是“成员枚举”;该枚举是声明它的类、结构、模块或接口的成员。

    在任何类、结构、模块或接口之外的命名空间级别声明的枚举,就只是该枚举出现在其中的命名空间的成员。

  • **特性。**您可以将特性作为一个整体应用于枚举,但不能单独应用于其成员。 特性将信息提供给程序集的元数据。

  • **修饰符。**默认情况下,所有枚举都是类型,它们的字段都是常量。 因此声明枚举或其成员时,不能使用 Shared、Static 和 ReadOnly 关键字。

数据类型规则

  • **默认类型。**如果不指定枚举的 data type,则每个成员都会采用其 initializer 的数据类型。 如果同时指定 data type 和 initializer,则 initializer 的数据类型必须能够转换为 data type。 如果既不存在 data type 也不存在 initializer,则数据类型默认为 Integer。

  • **初始化。**Enum 语句可以初始化 member list 中选定成员的内容。 可以使用 initializer 提供要分配给成员的表达式。

    每个 initializer 中提供的表达式可以是文本、已定义的其他常数以及已定义的枚举成员(包括此枚举以前的成员)的任意组合。 可以使用算术运算符和逻辑运算符来组合这些元素。

    不能在 initializer 中使用变量或函数。 但是,可以使用转换关键字,例如 CByte 和 CShort。 也可以使用 AscW(如果使用常数 String 或 Char 参数调用它),因为这可以在编译时进行计算。

行为

  • **访问级别。**所有枚举成员都具有 public 访问权限,您不能对这些成员使用任何访问修饰符。 但是,如果枚举本身具有更严格的访问级别,则指定的枚举访问级别优先。

  • **范围。**可以从成员枚举的类、结构、模块或接口内的任意位置访问这些枚举。 可以从命名空间中的任何代码访问该命名空间的成员枚举。

  • **限定。**类、结构或模块之外的代码必须使用该类、结构或模块的名称来限定某个成员枚举的名称。

  • **无效值。**若成员的值超过基础数据类型允许的范围,或将任何成员初始化为基础数据类型允许的最大值,编译器将会报错。

枚举变量是声明为 Enum 类型的变量。 以此种方式声明变量有助于控制赋给它的值。 但是,只要某个值的数据类型可以转换为枚举型,即使该值不是枚举成员,您也可以将该值赋给枚举变量。 当枚举是一个标志字段并且您要将标志的组合赋给该枚举变量时,这会十分有用。 下面的示例演示将多个标志赋给枚举变量。

Enum filePermissions
    create = 1
    read = 2
    write = 4
    delete = 8
End Enum
Dim file1Perm As filePermissions
file1Perm = filePermissions.create Or filePermissions.read

必须使用枚举变量名称或枚举名称本身限定对枚举成员的所有引用。 例如,要引用以上示例中的第一个成员,可以使用 filePermissions.create,而不能使用 create。

示例

下面的示例使用 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

请参见

参考

Const 语句 (Visual Basic)

Dim 语句 (Visual Basic)

类型转换函数 (Visual Basic)

Asc

AscW

概念

隐式转换和显式转换 (Visual Basic)

常量和枚举 (Visual Basic)

其他资源

Visual Basic 中的常量和枚举