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

更新 : 2007 年 11 月

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

クラスや構造体には、既定のプロパティを 1 つまで定義できます。ただし、既定のプロパティはオーバーロードできるので、複数の形式の定義が可能です。

詳細については、「既定のプロパティ」を参照してください。

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

  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"
    

使用例

クラスに既定のプロパティを宣言するコード例を次に示します。

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

このコードの例は、IntelliSense コード スニペットとしても利用できます。コード スニペット ピッカーでは、これは [Visual Basic Language] にあります。詳細については、「方法 : コードにスニペットを挿入する (Visual Basic)」を参照してください。

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 プロパティ (Collection オブジェクト) です。

堅牢性の高いプログラム

既定のプロパティを使用すると、ソース コードに記述する文字の量が少し減りますが、コードの読みやすさが低下します。呼び出しコードからクラスや構造体が明確に区別できない場合にクラス名または構造体名を使って参照すると、その参照がクラスと構造体のどちらに対するものなのか、また既定のプロパティを参照しているかどうかもはっきりしません。このような場合、コンパイル エラーまたはランタイムの論理エラーが発生する可能性があります。

Option Strict ステートメントを使ってコンパイラの型チェックを常に On に設定しておくことで、既定のプロパティのエラーが発生する可能性をいくらか低下できます。

定義済みのクラスまたは構造体を使ってコードを作成する場合には、既定のプロパティが設定されているかどうかを調べ、設定されていればその名前を確認しておくことが必要です。

以上のような難点があるため、既定のプロパティは定義しないことをお勧めします。コードの読みやすさの点からも、すべてのプロパティを、既定のプロパティであっても明示的に参照することを心がけてください。

参照

処理手順

方法 : プロパティを作成する

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

方法 : プロパティ プロシージャを呼び出す

方法 : プロパティに値を格納する

方法 : プロパティから値を取得する

概念

Property プロシージャ

プロシージャのパラメータと引数

既定のプロパティの変更点 (Visual Basic 6.0 ユーザー向け)

Visual Basic のプロパティと変数の違い

参照

Property ステートメント

Default (Visual Basic)