ReadOnly (Visual Basic)
変数またはプロパティを読み込めるが、書き込みはできないことを示します。
Remarks
ルール
宣言コンテキスト。
ReadOnly
は、モジュール レベルでのみ使用できます。 つまり、ReadOnly
要素の宣言コンテキストは、クラス、構造体、またはモジュールにする必要があり、ソース ファイル、名前空間、またはプロシージャにすることはできません。結合された修飾子。 同じ宣言内で
ReadOnly
をStatic
と共に指定することはできません。値の代入。
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" を保持します。 変数 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