Property プロシージャ (Visual Basic)
Property プロシージャは、モジュール、クラス、または構造体のカスタム プロパティを操作する一連の Visual Basic ステートメントです。Property プロシージャは、プロパティ アクセサーとも呼ばれます。
Visual Basic には次の Property プロシージャが用意されています。
Get プロシージャは、プロパティの値を返します。式の中でプロパティにアクセスするときに呼び出されます。
Set プロシージャは、プロパティに値 (オブジェクト参照を含む) を設定します。プロパティに値を代入するときに呼び出されます。
Property プロシージャは、通常は Getステートメントと Set ステートメントを使ってペアで定義しますが、プロパティが読み取り専用 (Get ステートメント) または書き込み専用 (Set ステートメント (Visual Basic)) の場合は、一方のプロシージャだけを定義できます。
自動実装プロパティを使用する場合は、Get プロシージャおよび Set プロシージャを省略できます。詳細については、「自動実装プロパティ (Visual Basic)」を参照してください。
プロパティは、クラス、構造体、およびモジュールで定義できます。プロパティは既定で Public になります。つまり、プロパティのコンテナーにアクセスできるアプリケーションであればどこからでも、プロパティを呼び出すことができます。
プロパティと変数の比較については、「Visual Basic のプロパティと変数の違い」を参照してください。
宣言の構文
プロパティ自体は、Property ステートメント と End Property ステートメントに囲まれたコード ブロックで定義されます。このブロック内に、宣言ステートメント (Get または Set) とそれに対応する End の宣言で囲まれた内部ブロックとして、各 Property プロシージャを記述します。
プロパティとそのプロシージャを宣言する構文は、次のとおりです。
[Default] [Modifiers] Property PropertyName[(ParameterList)] [As DataType]
[AccessLevel] Get
' Statements of the Get procedure.
' The following statement returns an expression as the property's value.
Return Expression
End Get
[AccessLevel] Set[(ByVal NewValue As DataType)]
' Statements of the Set procedure.
' The following statement assigns newvalue as the property's value.
LValue = NewValue
End Set
End Property
- or -
[Default] [Modifiers] Property PropertyName [(ParameterList)] [As DataType]
Modifiers はアクセス レベルの他、オーバーロード、オーバーライド、共有、シャドウに関する情報、またはプロパティが読み取り専用か、書き込み専用かを指定します。Get または Set の手順の AccessLevel は、プロパティに指定されたアクセス レベルよりも制限レベルです。詳細については、「Property ステートメント」を参照してください。
[データ型]
プロパティのデータ型とアクセス レベルは、Property プロシージャではなく、Property ステートメントに定義します。プロパティに定義できるデータ型は 1 つだけです。たとえば、Decimal 型で値を格納するが、Double 型の値を取得するようなプロパティを定義することはできません。
アクセス レベル
プロパティ自体に定義したアクセス レベルよりも制限の多いアクセスレベルを、Property プロシージャに定義できます。たとえば、Public プロパティを定義しておいて、Private Set プロシージャを定義するなどが可能です。このとき、一方の Get プロシージャは Public のままです。一方の Property プロシージャのアクセス レベルだけを変更できます。また、プロパティ自体のアクセス レベルよりも制限の多いレベルにしか変更できません。詳細については、「方法: 複数のアクセス レベルを持つプロパティを宣言する (Visual Basic)」を参照してください。
パラメーター宣言
各パラメーターの宣言は、Sub プロシージャ (Visual Basic)の場合と同じ方法で行います。ただし、ByVal で渡す必要がある点が異なります。
パラメーター リストの各パラメーターの構文は次のとおりです。
[Optional] ByVal [ParamArray] parametername As datatype
パラメーターを省略可能にする場合は、宣言内で既定値を指定する必要があります。既定値を指定する構文は次のとおりです。
Optional ByVal parametername As datatype = defaultvalue
プロパティ値
Get プロシージャでは、戻り値がプロパティの値として呼び出し元の式に返されます。
Set プロシージャでは、新しいプロパティ値を Set ステートメントのプロパティに渡します。パラメーターを明示的に宣言する場合は、プロパティと同じデータ型で宣言する必要があります。パラメーターを宣言しなければ、コンパイラはプロパティに代入する新しい値を表すために、暗黙のパラメーター Value を使用します。
呼び出し構文
Property プロシージャは、プロパティを参照することによって暗黙的に呼び出されます。変数の名前を使用するのと同じように、プロパティの名前を使用します。ただし、省略できないすべての引数の値を指定し、引数のリストをかっこで囲む必要があります。指定する引数がない場合は、かっこを省略することもできます。
Set プロシージャを暗黙的に呼び出す構文は次のとおりです。
propertyname[(argumentlist)] = expression
Get プロシージャを暗黙的に呼び出す構文は次のとおりです。
lvalue = propertyname[(argumentlist)]
Do While (propertyname[(argumentlist)] > expression)
宣言と呼び出しの説明
次のプロパティは、フル ネームをファースト ネームとラスト ネームの 2 つの部分に分けて格納します。呼び出しコードが fullName を読み込むと、Get プロシージャが 2 つの部分を組み合わせてフル ネームを返します。呼び出しコードが新しいフル ネームを代入すると、Set プロシージャはそれを 2 つの部分に分割します。フル ネームに空白が含まれない場合は、全体をファースト ネームとして格納します。
Dim firstName, lastName As String
Property fullName() As String
Get
If lastName = "" Then
Return firstName
Else
Return firstName & " " & lastName
End If
End Get
Set(ByVal Value As String)
Dim space As Integer = Value.IndexOf(" ")
If space < 0 Then
firstName = Value
lastName = ""
Else
firstName = Value.Substring(0, space)
lastName = Value.Substring(space + 1)
End If
End Set
End Property
fullName の Property プロシージャを呼び出す一般的な例は次のとおりです。
fullName = "MyFirstName MyLastName"
MsgBox(fullName)
参照
処理手順
方法: プロパティ プロシージャを呼び出す (Visual Basic)
方法: 既定のプロパティを宣言して呼び出す (Visual Basic)
方法: プロパティに値を格納する (Visual Basic)
方法: プロパティから値を取得する (Visual Basic)
概念
Function プロシージャ (Visual Basic)