共用方式為


ReadOnly (Visual Basic)

更新:2007 年 11 月

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

備註

規則

  • 宣告內容。:您只能在模組層級使用 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,防止程序變更呼叫引數本身,但允許它變更其成員。

範例

下列範例針對員工的雇用日期定義 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 語言關鍵字