ReadOnly (Visual Basic)

指定只能读取但不能写入某一变量或属性。

注解

规则

  • 声明上下文。 只能在模块级别使用 ReadOnly。 这意味着 ReadOnly 元素的声明上下文必须是类、结构或模块,不能是源文件、命名空间或过程。

  • 组合修饰符。 不能在同一过程声明中同时指定 ReadOnlyStatic

  • 赋值。 使用 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”。 由于变量 characterArrayReadOnly,因此在初始化后就不能更改其值,也就是说,不能为其分配新数组。 不过,可以更改一个或多个数组成员的值。 在调用过程 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 修饰符可用于下面的上下文中:

另请参阅