既定のプロパティは、指定せずにコードがアクセスできるクラスまたは構造体のプロパティです。 コードを呼び出すと、クラスまたは構造体の名前がプロパティではなく、コンテキストによってプロパティへのアクセスが許可される場合、Visual Basic は、そのクラスまたは構造体の既定のプロパティ (存在する場合) へのアクセスを解決します。
クラスまたは構造体には、最大で 1 つの既定のプロパティを含めることができます。 ただし、既定のプロパティをオーバーロードし、複数のバージョンを持つことができます。
詳細については、「 既定値」を参照してください。
既定のプロパティを宣言するには
通常の方法でプロパティを宣言します。
Shared
キーワードまたはPrivate
キーワードは指定しないでください。プロパティ宣言に
Default
キーワードを含めます。プロパティに少なくとも 1 つのパラメーターを指定します。 少なくとも 1 つの引数を受け取らない既定のプロパティを定義することはできません。
Default Property myProperty(ByVal index As Integer) As String
既定のプロパティを呼び出すには
包含クラスまたは構造体型の変数を宣言します。
Dim x As New class1(3)
通常はプロパティ名を含める式では、変数名を単独で使用します。
MsgBox(x)
変数名の後に、引数リストをかっこで囲みます。 既定のプロパティは、少なくとも 1 つの引数を受け取る必要があります。
MsgBox(x(1))
既定のプロパティ値を取得するには、変数名を引数リストと共に式で使用するか、代入ステートメントで等号 (
=
) に従って使用します。MsgBox(x(1) & x(2) & x(3))
既定のプロパティ値を設定するには、代入ステートメントの左側にある引数リストと共に変数名を使用します。
x(1) = "Hello" x(2) = " " x(3) = "World"
他のプロパティにアクセスする場合と同様に、常に既定のプロパティ名を変数名と共に指定できます。
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
次の例では、クラス myProperty
で既定のプロパティ class1
を呼び出す方法を示します。 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
に設定することで、既定のプロパティ エラーの可能性を少し減らすことができます。
定義済みのクラスまたは構造体をコードで使用する予定の場合は、既定のプロパティがあるかどうかを判断し、存在する場合は、その名前を決定する必要があります。
これらの欠点があるため、既定のプロパティを定義しないことを検討する必要があります。 コードを読みやすくするために、既定のプロパティであっても、常にすべてのプロパティを明示的に参照することも検討する必要があります。
こちらも参照ください
.NET