変数またはプロパティを読み取ることができるが、書き込めないことを指定します。
注釈
準則
宣言コンテキスト。
ReadOnly
はモジュール レベルでのみ使用できます。 つまり、ReadOnly
要素の宣言コンテキストはクラス、構造体、またはモジュールである必要があり、ソース ファイル、名前空間、またはプロシージャにすることはできません。結合された修飾子。 同じ宣言内の
Static
と共にReadOnly
を指定することはできません。値の割り当て。
ReadOnly
プロパティを使用するコードでは、その値を設定できません。 ただし、基になるストレージにアクセスできるコードは、いつでも値を割り当てたり変更したりすることができます。ReadOnly
変数に値を割り当てることができるのは、その宣言内、または定義されているクラスまたは構造体のコンストラクター内だけです。
ReadOnly 変数を使用するタイミング
Const ステートメントを使用して定数値を宣言して割り当てることができない場合があります。 たとえば、 Const
ステートメントでは、割り当てるデータ型が受け入れられない場合や、コンパイル時に定数式を使用して値を計算できない場合があります。 コンパイル時に値を知らない場合もあります。 このような場合は、 ReadOnly
変数を使用して定数値を保持できます。
Von Bedeutung
変数のデータ型が配列やクラス インスタンスなどの参照型である場合、変数自体が 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
されるため、初期化後に値を変更することはできません。つまり、新しい配列を割り当てることはできません。 ただし、1 つ以上の配列メンバーの値を変更できます。 プロシージャ 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
修飾子は、次のコンテキストで使用できます。
こちらも参照ください
.NET