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

"既定のプロパティ" とは、コードで指定しなくてもアクセスできるクラスまたは構造体のプロパティです。 呼び出し元のコードでクラスまたは構造体の名前を指定し、プロパティ名を指定していないときに、コンテキストでプロパティへのアクセスが許可されている場合、Visual Basic はアクセスをそのクラスまたは構造体の既定のプロパティ (存在する場合) に解決します。

クラスまたは構造体は、最大 1 つの既定のプロパティを持つことができます。 ただし、既定のプロパティをオーバーロードし、複数のバージョンを用意することができます。

詳細については、「Default」をご覧ください。

既定のプロパティを宣言するには

  1. 通常の方法でプロパティを宣言します。 Shared または Private キーワードは指定しないでください。

  2. プロパティ宣言に Default キーワードを含めます。

  3. プロパティに少なくとも 1 つのパラメーターを指定します。 1 つ以上の引数を受け取らない既定のプロパティを定義することはできません。

    Default Property myProperty(ByVal index As Integer) As String
    

既定のプロパティを呼び出すには

  1. 包含クラスまたは構造体の型の変数を宣言します。

    Dim x As New class1(3)
    
  2. 通常はプロパティ名を含める式で変数名のみを使用します。

    MsgBox(x)
    
  3. 変数名の後に、かっこで囲んだ引数リストを指定します。 既定のプロパティは、少なくとも 1 つの引数を受け取る必要があります。

    MsgBox(x(1))
    
  4. 既定のプロパティ値を取得するには、式内または代入ステートメントの等号 (=) の後に、変数名と引数リストを使用します。

    MsgBox(x(1) & x(2) & x(3))
    
  5. 既定のプロパティ値を設定するには、代入ステートメントの左辺に変数名と引数リストを使用します。

    x(1) = "Hello"
    x(2) = " "
    x(3) = "World"
    
  6. 他のプロパティにアクセスする場合と同様に、既定のプロパティ名は常に変数名と共に指定できます。

    x.myProperty(1) = "Hello"
    x.myProperty(2) = " "
    x.myProperty(3) = "World"
    

例 1

次の例では、クラスの既定のプロパティを宣言しています。

Public Class class1
    Private myStrings() As String
    Sub New(ByVal size As Integer)
        ReDim myStrings(size)
    End Sub
    Default Property myProperty(ByVal index As Integer) As String
        Get
            ' The Get property procedure is called when the value
            ' of the property is retrieved.
            Return myStrings(index)
        End Get
        Set(ByVal Value As String)
            ' The Set property procedure is called when the value
            ' of the property is modified.
            ' The value to be assigned is passed in the argument 
            ' to Set.
            myStrings(index) = Value
        End Set
    End Property
End Class

例 2

次の例は、class1 クラスの既定のプロパティ myProperty を呼び出す方法を示しています。 3 つの代入ステートメントで myProperty に値を格納し、MsgBox 呼び出しで値を読み取ります。

Sub Test()
    Dim x As New class1(3)
    x(1) = "Hello"
    x(2) = " "
    x(3) = "World"
    MsgBox(x(1) & x(2) & x(3))
End Sub

既定のプロパティの最も一般的な用途は、さまざまなコレクション クラスの Item[] プロパティです。

信頼性の高いプログラミング

既定のプロパティを使用すると、ソース コード文字が少し少なくなる可能性がありますが、コードが読みにくくなる可能性があります。 呼び出し元のコードがクラスまたは構造体をよく理解していない場合は、クラスまたは構造体の名前を参照するときに、その参照がクラスまたは構造体自体、または既定のプロパティにアクセスするかどうかがわかりません。 これにより、コンパイラ エラーや実行時の微妙なロジック エラーが発生する可能性があります。

常に Option Strict ステートメントを使用してコンパイラの型チェックを On に設定することにより、既定のプロパティ エラーが発生する可能性を多少減らすことができます。

定義済みのクラスまたは構造体をコード内で使用する予定の場合は、既定のプロパティがあるかどうかと、ある場合はその名前を確認する必要があります。

これらの欠点があるため、既定のプロパティを定義しないことを検討してください。 コードを読みやすくするためには、既定のプロパティを含め、常にすべてのプロパティを明示的に参照することも検討してください。

関連項目