次の方法で共有


自動的に実装されるプロパティ (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}

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

自動的に実装されるプロパティは便利であり、多くのプログラミング シナリオをサポートします。 ただし、自動的に実装されるプロパティを使用できず、代わりに標準または expandedプロパティ構文を使用する必要がある場合があります。

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

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

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

  • WriteOnly のプロパティを作成する。

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

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

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

自動的に実装されるプロパティの展開

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

関連項目