自動実装プロパティ (Visual Basic)

自動実装プロパティを使用すると、プロパティを Get および Set するコードを記述することなく、クラスのプロパティをすばやく指定することができます。 自動実装プロパティのコードを記述する場合、Visual Basic コンパイラでは、関連付けられた Get プロシージャおよび Set プロシージャが作成されるだけでなく、プロパティの変数を格納するためのプライベート フィールドが自動的に作成されます。

自動実装プロパティを使用することで、既定値を含むプロパティは、1 つの行に宣言できます。 次に、プロパティ宣言の 3 つの例を示します。

Public Property Name As String
Public Property Owner As String = "DefaultName"
Public Property Items As New List(Of String) From {"M", "T", "W"}
Public Property ID As New Guid()

自動実装プロパティは、プライベート フィールドにプロパティ値が格納されたプロパティに相当します。 自動実装プロパティを次のコード例に示します。

Property Prop2 As String = "Empty"

次のコード例は、前の自動実装プロパティの例で示したコードと同じ結果になります。

Private _Prop2 As String = "Empty"
Property Prop2 As String
    Get
        Return _Prop2
    End Get
    Set(ByVal value As String)
        _Prop2 = value
    End Set
End Property

バッキング フィールド

自動実装プロパティを宣言する場合、Visual Basic では、プロパティ値を格納するためのバッキング フィールドという隠しプライベート フィールドが自動的に作成されます。 バッキング フィールド名は、自動実装プロパティ名の前にアンダースコア (_) が付いた名前になります。 たとえば、ID という名前の自動実装プロパティを宣言した場合は、バッキング フィールド名は _ID になります。 _ID という名前のクラスのメンバーを含めた場合、名前の競合が発生し、Visual Basic でコンパイル エラーが報告されます。

また、バッキング フィールドには、次の特性もあります。

  • バッキング フィールドのアクセス修飾子は、そのプロパティ自体に Public などの別のアクセス レベルがある場合でも、常に Private です。

  • プロパティ フィールドが Shared としてマークされている場合は、バッキング フィールドも共有になります。

  • プロパティに指定された属性は、バッキング フィールドには適用されません。

  • バッキング フィールドは、クラス内のコードや、ウォッチ ウィンドウなどのデバッグ ツールからアクセスできます。 ただし、バッキング フィールドは IntelliSense の単語補完リストには表示されません。

自動実装プロパティの初期化

フィールドの初期化に使用する式は、すべて自動実装プロパティの初期化にも使用できます。 自動実装プロパティを初期化する場合、その式は評価され、そのプロパティの Set プロシージャに渡されます。 次のコード例は、初期値を持ついくつかの自動実装プロパティを示しています。

Property FirstName As String = "James"
Property PartNo As Integer = 44302
Property Orders As New List(Of Order)(500)

Interface のメンバーである自動実装プロパティ、または MustOverride とマークされた自動実装プロパティを初期化することはできません。

自動実装プロパティを Structure のメンバーとして宣言した場合、自動実装プロパティを Shared としてマークした場合にのみ初期化できます。

自動実装プロパティを配列として宣言した場合、明示的な配列の範囲は指定できません。 しかし、次の例に示すように、配列初期化子を使用して値を指定することができます。

Property Grades As Integer() = {90, 73}
Property Temperatures As Integer() = New Integer() {68, 54, 71}

標準構文を必要とするプロパティ定義

自動実装プロパティは使いやすく、多くのプログラミング シナリオに対応します。 しかし、自動実装プロパティを使用できない状況もあり、代わりに標準または展開されたプロパティ構文を使用する必要があります。

次のいずれかを実行する場合、展開されたプロパティ定義構文を使用する必要があります。

  • Set プロシージャで受信した値を検証するコードなどの、コードをプロパティの Get プロシージャまたは Set プロシージャに追加する。 たとえば、電話番号を示す文字列のプロパティ値を設定する前に、その文字列に必要な番号や数字が含まれていることを検証する場合です。

  • Get プロシージャと Set プロシージャに異なるアクセシビリティを指定する。 たとえば、Set プロシージャを Private にし、Get プロシージャを Public にする場合です。

  • WriteOnly または ReadOnly のプロパティを作成する。

  • パラメーター化されたプロパティ (Default プロパティなど) を使用する。 展開されたプロパティは、そのプロパティのパラメーターを指定する、または Set プロシージャに追加のパラメーターを指定するためには宣言する必要があります。

  • バッキング フィールドに属性を指定するか、バッキング フィールドのアクセス レベルを変更する。

  • バッキング フィールドに XML コメントを指定する。

自動実装プロパティの展開

自動実装プロパティを Get プロシージャまたは Set プロシージャを含む展開されたプロパティに変換する必要がある場合、Visual Basic コード エディターを使用すると、Get プロシージャおよび Set プロシージャと、そのプロパティの End Property ステートメントを自動的に生成できます。 カーソルを空白行に置き、Property ステートメントの後に「G」(Get の G) または「S」(Set の S) と入力し、Enter キーを押すと、コードが生成されます。 Property ステートメントの最後で Enter キーを押すと、読み取り専用のプロパティおよび書き込み専用のプロパティの Get プロシージャまたは Set プロシージャが Visual Basic コード エディターで自動的に作成されます。

参照

処理手順

方法: 既定のプロパティを宣言して呼び出す (Visual Basic)

方法: 複数のアクセス レベルを持つプロパティを宣言する (Visual Basic)

参照

Property ステートメント

ReadOnly (Visual Basic)

WriteOnly (Visual Basic)

概念

Visual Basic のオブジェクトとクラス

履歴の変更

日付

履歴

理由

2010 年 5 月

バッキング フィールドのアクセス レベルに関するメモが追加されました。

カスタマー フィードバック