Const 语句 (Visual Basic)

声明和定义一个或多个常数。

[ <attributelist> ] [ accessmodifier ] [ Shadows ] 
Const constantlist

部件

  • attributelist
    可选。 特性列表,适用于此语句中声明的所有常数。 请参见尖括号(“<”和“>”)中的特性列表 (Visual Basic)

  • accessmodifier
    可选。 使用此项来指定哪个代码可以访问这些常数。 可以是 Public (Visual Basic)Protected (Visual Basic)Friend (Visual Basic)、Protected Friend 或 Private (Visual Basic)

  • Shadows
    可选。 使用此项来重新声明和隐藏基类中的编程元素。 请参见 Shadows

  • constantlist
    必选。 在此语句中声明的常数的列表。

    constant [ , constant ... ]

    每个 constant 均有下列语法和部分:

    constantname [ As datatype ] = initializer

    组成部分

    说明

    constantname

    必选。 常数名称。 请参见 已声明的元素名称 (Visual Basic)

    datatype

    如果 Option Strict 为 On,则为必选项。 常数的数据类型。

    initializer

    必选。 先在编译时计算然后分配给此常数的表达式。

备注

如果有一个值在应用程序中始终不变,则可以定义一个命名常数,并用该常数取代文本值。 名称比值更容易记忆。 可以只定义该常数一次,然后在代码中的多处使用它。 如果需要在以后的版本中重新定义值,则只需更改 Const 语句即可。

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

局部常数(在某个过程的内部)默认为公共访问,并且不能对这些常数使用任何访问修饰符。 类和模块成员常数(在任何过程的外部)默认为私有访问,而结构成员常数则默认为公共访问。 可以使用访问修饰符来调整它们的访问级别。

规则

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

    在过程级别声明的常数是局部常数,该常数局限于声明它的过程或块。

  • **特性。**只能将特性应用于成员常数,而不能应用于局部常数。 特性为程序集的元数据提供信息,该信息对于临时存储(如局部常数)没有意义。

  • **修饰符。**默认情况下,所有常量均为 Shared、Static 和 ReadOnly。 在声明常数时,不能使用这些关键字中的任何一个。

    在过程级别,不能使用 Shadows 或任何访问修饰符来声明局部常数。

  • **多个常数。**可以在同一声明语句中声明多个常量,并为每个常量指定 constantname 部分。 以逗号分隔多个常数。

数据类型规则

  • **数据类型。**Const 语句可以声明变量的数据类型。 可以指定任何数据类型或枚举的名称。

  • **默认类型。**如果不指定 datatype,常量将采用 initializer 的数据类型。 如果指定 datatype 和 initializer,则 initializer 的数据类型必须能够转换为 datatype。 如果既不存在 datatype 也不存在 initializer,则数据类型默认为 Object。

  • **不同的类型。**可以为不同的常量指定不同的数据类型,方法是为声明的每个变量使用单独的 As 子句。 但是,不能通过使用公用 As 子句将多个常数声明为同一类型。

  • **初始化。**必须初始化 constantlist 中每个常量的值。 可以使用 initializer 来提供要分配给常数的表达式。 表达式可以是文本、其他已定义的常数以及已定义的枚举成员的任意组合。 可以使用算术运算符和逻辑运算符来组合这些元素。

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

行为

  • **范围。**局部常数只能从它们的过程或块中访问; 而成员常数则可以从它们的类、结构或模块内的任意位置访问。

  • **限定。**类、结构或模块之外的代码必须使用该类、结构或模块的名称来限定成员常数的名称。 过程或块之外的代码不能引用该过程或块内的任何局部常数。

示例

下面的示例使用 Const 语句来声明用于代替文本值的常数。

' The following statements declare constants.  
Const maximum As Long = 459
Public Const helpString As String = "HELP" 
Private Const startValue As Integer = 5

如果使用数据类型 Object 定义常数,Visual Basic 编译器将为其赋予 initializer 的类型,而不是 Object。 在下面的示例中,常数 naturalLogBase 具有运行时类型 Decimal。

Const naturalLogBase As Object = CDec(2.7182818284)
MsgBox("Run-time type of constant naturalLogBase is " &
    naturalLogBase.GetType.ToString())

前面的示例在 GetType 运算符 (Visual Basic) 返回的 Type 对象上使用 ToString 方法,原因是无法使用 CStr 将 Type 转换为 String。

请参见

参考

Enum 语句 (Visual Basic)

#Const 指令

Dim 语句 (Visual Basic)

ReDim 语句 (Visual Basic)

类型转换函数 (Visual Basic)

Asc

AscW

概念

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

常量和枚举 (Visual Basic)

其他资源

Visual Basic 中的常量和枚举