自動的に実装されるプロパティ (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
次のコードは、読み取り専用プロパティの実装を示しています。
Class Customer
Public ReadOnly Property Tags As New List(Of String)
Public ReadOnly Property Name As String = ""
Public ReadOnly Property File As String
Sub New(file As String)
Me.File = file
End Sub
End Class
例で示されているように、初期化式でプロパティに割り当てることができます。また、含む型のコンストラクター内でプロパティに割り当てることもできます。 任意の時点で読み取り専用プロパティのバッキング フィールドに割り当てることができます。
バッキング フィールド
自動的に実装されるプロパティを宣言すると、プロパティ値を格納するバッキング フィールドと呼ばれる 非表示のプライベート フィールド が 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
のプロパティを作成する。パラメーター化されたプロパティ (
Default
プロパティなど) を使用する。 プロパティのパラメーターを指定するか、Set
プロシージャに追加のパラメーターを指定するには、展開されたプロパティを宣言する必要があります。バッキング フィールドに属性を指定するか、バッキング フィールドのアクセス レベルを変更する。
バッキング フィールドに XML コメントを指定する。
自動的に実装されるプロパティの展開
自動的に実装されるプロパティを、またはSet
プロシージャを含むGet
展開プロパティに変換する必要がある場合は、Visual Basic コード エディターで、プロパティのプロシージャとEnd Property
Set
ステートメントを自動的に生成Get
できます。 Property
ステートメントの後の空白行にカーソルを置き、「G
」(Get
を表します) または「S
」(Set
を表します) と入力し、Enter キーを押すと、このコードが生成されます。 Property
ステートメントの最後で Enter キーを押すと、読み取り専用のプロパティおよび書き込み専用のプロパティの Get
プロシージャまたは Set
プロシージャが Visual Basic コード エディターで自動的に作成されます。
関連項目
.NET