Const 语句 (Visual Basic)

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

语法

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

组成部分

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

accessmodifier
可选。 使用它来指定哪些代码可以访问这些常量。 可以是 PublicProtectedFriendProtected FriendPrivatePrivate Protected

Shadows
可选。 使用它来重新声明和隐藏基类中的编程元素。 请参阅阴影

constantlist
必需。 此语句中声明的常量的列表。

constant [ , constant ... ]

每个 constant 都具有以下语法和部件:

constantname [ As datatype ] = initializer

组成部分 说明
constantname 必需。 常量的名称。 请参阅 Declared Element Names
datatype 如果 Option StrictOn,则是必需的。 常量的数据类型。
initializer 必需。 在编译时计算并赋予常量的表达式。

注解

如果你的应用程序中有一个永远不会更改的值,你可以定义一个命名常量并使用它来代替文字值。 名称比值更容易记住。 你可以只定义一次常量,然后便可在代码中多次使用。 如果在以后的版本中你需要重新定义该值,则你只需要更改 Const 语句。

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

本地常量(在过程中)默认为公共访问,你不能对它们使用任何访问修饰符。 类和模块成员常量(在任何过程之外)默认为私有访问,结构成员常量默认为公共访问。 可以使用访问修饰符调整其访问级别。

规则

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

    在过程级别声明的常量是本地常量;它在声明它的过程或块中是本地的。

  • 特性。 你只能将属性应用于成员常量,而不能应用于本地常量。 属性为程序集的元数据提供信息,这对于本地常量等临时存储没有意义。

  • 修饰符。 默认情况下,所有常量都是 SharedStaticReadOnly。 声明常量时不能使用这些关键字中的任何一个。

    在过程级别,你不能使用 Shadows 或任何访问修饰符来声明本地常量。

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

数据类型规则

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

  • 默认类型。 如果不指定 datatype,则常量采用 initializer 数据类型。 如果同时指定 datatypeinitializer,则 initializer 的数据类型必须可转换为 datatype。 如果既不存在 datatype 也不存在 initializer,则数据类型默认为 Object

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

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

    你不能在 initializer 中使用变量或函数。 但是,你可以使用转换关键字,例如 CByteCShort。 如果你使用常量 StringChar 参数调用它,你也可以使用 AscW,因为它可以在编译时进行求值。

行为

  • 作用域。 本地常量只能从它们的过程或块中访问。 成员常量可以从它们的类、结构或模块中的任何地方访问。

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

示例 1

以下示例使用 Const 语句声明常量以代替文字值。

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

示例 2

如果你定义一个具有数据类型 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 运算符返回的 Type 对象上的 ToString 方法,因为无法使用 CStrType 转换为 String

另请参阅