ReadOnly (Visual Basic)
指定只能读取但不能写入某一变量或属性。
注解
规则
声明上下文。 只能在模块级别使用
ReadOnly
。 这意味着ReadOnly
元素的声明上下文必须是类、结构或模块,不能是源文件、命名空间或过程。组合修饰符。 不能在同一过程声明中同时指定
ReadOnly
和Static
。赋值。 使用
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
修饰符可用于下面的上下文中: