Const 语句 (Visual Basic)
声明和定义一个或多个常量。
语法
[ <attributelist> ] [ accessmodifier ] [ Shadows ]
Const constantlist
组成部分
attributelist
可选。 适用于此语句中声明的所有常量的属性列表。 请参见尖括号(“”和“”)中的<
属性列表>
。
accessmodifier
可选。 使用它来指定哪些代码可以访问这些常量。 可以是 Public、Protected、Friend、Protected Friend、Private 或 Private Protected。
Shadows
可选。 使用它来重新声明和隐藏基类中的编程元素。 请参阅阴影。
constantlist
必需。 此语句中声明的常量的列表。
constant
[ ,
constant
... ]
每个 constant
都具有以下语法和部件:
constantname
[ As
datatype
] =
initializer
组成部分 | 说明 |
---|---|
constantname |
必需。 常量的名称。 请参阅 Declared Element Names。 |
datatype |
如果 Option Strict 为 On ,则是必需的。 常量的数据类型。 |
initializer |
必需。 在编译时计算并赋予常量的表达式。 |
注解
如果你的应用程序中有一个永远不会更改的值,你可以定义一个命名常量并使用它来代替文字值。 名称比值更容易记住。 你可以只定义一次常量,然后便可在代码中多次使用。 如果在以后的版本中你需要重新定义该值,则你只需要更改 Const
语句。
你只能在模块或过程级别使用 Const
。 这意味着变量的声明上下文必须是类、结构、模块、过程或块,不能是源文件、命名空间或接口。 有关详细信息,请参阅声明上下文和默认访问级别。
本地常量(在过程中)默认为公共访问,你不能对它们使用任何访问修饰符。 类和模块成员常量(在任何过程之外)默认为私有访问,结构成员常量默认为公共访问。 可以使用访问修饰符调整其访问级别。
规则
声明上下文。 在模块级别声明的常量,在任何过程之外,都是成员常量;它是声明它的类、结构或模块的成员。
在过程级别声明的常量是本地常量;它在声明它的过程或块中是本地的。
特性。 你只能将属性应用于成员常量,而不能应用于本地常量。 属性为程序集的元数据提供信息,这对于本地常量等临时存储没有意义。
修饰符。 默认情况下,所有常量都是
Shared
、Static
和ReadOnly
。 声明常量时不能使用这些关键字中的任何一个。在过程级别,你不能使用
Shadows
或任何访问修饰符来声明本地常量。多个常量。 你可以在同一声明语句中声明多个常量,并为每个常量指定
constantname
部分。 多个常量用逗号分隔。
数据类型规则
数据类型。
Const
语句可以声明变量的数据类型。 你可以指定任何数据类型或枚举的名称。默认类型。 如果不指定
datatype
,则常量采用initializer
数据类型。 如果同时指定datatype
和initializer
,则initializer
的数据类型必须可转换为datatype
。 如果既不存在datatype
也不存在initializer
,则数据类型默认为Object
。不同类型。 你可以通过为你声明的每个变量使用单独的
As
子句来为不同的常量指定不同的数据类型。 但是,你不能使用公共As
子句将多个常量声明为同一类型。初始化。 你必须初始化
constantlist
中每个常量的值。 可使用initializer
提供要分配给常量的表达式。 表达式可以是文字、已定义的其他常量和已定义的枚举成员的任意组合。 可以使用算术和逻辑运算符来组合这些元素。你不能在
initializer
中使用变量或函数。 但是,你可以使用转换关键字,例如CByte
和CShort
。 如果你使用常量String
或Char
参数调用它,你也可以使用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 方法,因为无法使用 CStr
将 Type 转换为 String
。