指定可以读取变量或属性,但不能写入。
注解
规则
声明上下文。 只能在模块级别使用
ReadOnly
。 这意味着元素的ReadOnly
声明上下文必须是类、结构或模块,不能是源文件、命名空间或过程。组合修饰符。 不能在同
Static
一声明中一起指定ReadOnly
。分配值。 使用
ReadOnly
属性的代码无法设置其值。 但是,有权访问基础存储的代码可以随时分配或更改该值。只能在变量的声明中或在定义变量的类或结构的构造函数中为变量赋值
ReadOnly
。
何时使用 ReadOnly 变量
在某些情况下,无法使用 Const 语句 声明和分配常量值。 例如, Const
该语句可能不接受要分配的数据类型,或者可能无法使用常量表达式在编译时计算值。 您甚至可能不知道编译时的值。 在这些情况下,可以使用 ReadOnly
变量来保存常量值。
重要
如果变量的数据类型是引用类型(如数组或类实例),则即使变量本身是 ReadOnly
,也可以更改其成员。 下面的示例对此进行了演示。
ReadOnly characterArray() As Char = {"x"c, "y"c, "z"c}
Sub ChangeArrayElement()
characterArray(1) = "M"c
End Sub
初始化时,通过 characterArray()
保存“x”、“y”和“z”指向的数组。 由于变量 characterArray
是 ReadOnly
,因此在初始化变量后无法更改其值;也就是说,无法向其分配新数组。 但是,可以更改一个或多个数组成员的值。 调用过程 ChangeArrayElement
后,指向的数组包含 characterArray()
“x”、“M”和“z”。
请注意,这类似于将过程参数声明为 ByVal,这会阻止过程更改调用参数本身,但允许它更改其成员。
示例:
以下示例定义 ReadOnly
员工雇用日期的属性。 该类在内部将属性值存储为变量 Private
,并且只有类内的代码可以更改该值。 但是,该属性是 Public
,可以访问该类的任何代码都可以读取该属性。
Class employee
' Only code inside class employee can change the value of hireDateValue.
Private hireDateValue As Date
' Any code that can access class employee can read property dateHired.
Public ReadOnly Property dateHired() As Date
Get
Return hireDateValue
End Get
End Property
End Class
修饰 ReadOnly
符可用于以下上下文: