Share via


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 修飾詞可用於以下內容:

另請參閱