-
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