次の方法で共有


ReadOnly (Visual Basic)

変数またはプロパティを読み取ることができるが、書き込めないことを指定します。

注釈

準則

  • 宣言コンテキスト。 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" を保持します。 変数 characterArrayReadOnlyされるため、初期化後に値を変更することはできません。つまり、新しい配列を割り当てることはできません。 ただし、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修飾子は、次のコンテキストで使用できます。

こちらも参照ください