ReadOnly (Visual Basic)

指定變數或屬性可以讀取但不可寫入。

備註

規則

  • **宣告內容:**只能在模組層級使用 ReadOnly。 這表示 ReadOnly 元素的宣告內容必須是類別、結構或模組,且不能是原始程式檔、命名空間或程序。

  • **組合的修飾詞:**您無法在同一個宣告中同時指定 ReadOnly 和 Static。

  • 指派值使用 ReadOnly 屬性的程式碼無法設定其值。 但擁有基礎儲存體存取權限的程式碼可隨時指派或變更值。

    您只能在 ReadOnly 變數的宣告中,或在定義了該變數的類別或結構的建構函式 (Constructor) 中,將值指派給該變數。

ReadOnly 變數的使用時機

在某些情況下,可能無法使用 Const 陳述式 (Visual Basic) 來宣告和指派常數值。 例如,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 (Visual Basic),防止程序變更呼叫引數本身,但允許它變更其成員。

範例

下列範例針對員工的雇用日期定義 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 修飾詞可用於以下內容中:

Dim 陳述式

Property 陳述式

請參閱

參考

WriteOnly (Visual Basic)

其他資源

關鍵字 (Visual Basic)