Property ステートメントは、プロパティを宣言するときに指定します。プロパティには Get プロシージャ (読み取り専用)、Set プロシージャ (書き込み専用)、またはその両方 (読み取り/書き込み) を定義できます。
Property は、モジュール レベルでのみ使用できます。つまり、プロパティの宣言コンテキストは、クラス、構造体、モジュール、またはインターフェイスであることが必要で、ソース ファイル、名前空間、プロシージャ、ブロックでは宣言できません。詳細については、「宣言コンテキストと既定のアクセス レベル」を参照してください。
プロパティの既定のアクセス レベルは、パブリック アクセスです。プロパティのアクセスレベルは、Property ステートメントにアクセス修飾子を指定することによって変更できます。また、必要に応じて、一方のプロパティ プロシージャを、より制限の高いアクセス レベルに変更することも可能です。
Visual Basic は、プロパティの割り当ての際に、パラメータを Set プロシージャに渡します。Set のパラメータを指定しない場合、統合開発環境 (IDE) は value と呼ばれる暗黙のパラメータを使用します。このパラメータには、プロパティに割り当てる値が格納されています。通常、この値はプライベートなローカル変数に格納しますが、Get プロシージャを呼び出せばいつでも値を取得できます。
規則
-
アクセス レベルの混在。 読み書き可能なプロパティを定義する場合、必要であれば Get プロシージャと Set プロシージャのどちらかに限り、プロパティとは異なるアクセス レベルを指定できます。これを指定する場合は、プロシージャにプロパティよりも制限の高いアクセス レベルを指定する必要があります。たとえば、プロパティを Friend で宣言する場合、Set プロシージャを Private で宣言できますが、Public では宣言できません。
ReadOnly プロパティまたは WriteOnly プロパティを定義する場合は、1 つのプロパティ プロシージャ (前者なら Get、後者なら Set) がプロパティ全体を表すことになります。このようなプロシージャに異なるアクセス レベルを宣言すると、プロパティにアクセスレベルを 2 つ設定することになるため、宣言できません。
-
戻り値の型。Property ステートメントには、プロパティが返す値のデータ型を宣言できます。任意のデータ型の他に、列挙値、構造体、クラス、またはインターフェイスの名前を指定できます。
returntype を指定しない場合、プロパティは Object を返します。
-
実装。プロパティに Implements キーワードが指定されている場合は、このプロパティの包含クラスの Class ステートメント、または包含構造体の Structure ステートメントのすぐ後に、Implements ステートメントが指定されている必要があります。Implements ステートメントには、implementslist に指定された各インターフェイスが定義されていることが必要です。ただし、インターフェイスが Property の定義に使用した名前 (definedname に指定) は、このプロパティの名前 (name に指定) と同じでなくてもかまいません。
動作
-
プロパティ プロシージャからの戻り Get プロシージャまたは Set プロシージャから呼び出しコードに制御が戻るとき、プロシージャを呼び出したステートメントの次のステートメントから実行が継続します。
Exit Property ステートメントと Return ステートメントは、プロパティ プロシージャを直ちに終了します。プロシージャの任意の場所に、Exit Property ステートメントと Return ステートメントを何度でも定義できます。また、Exit Property ステートメントと Return ステートメントの混在も可能です。
-
戻り値。Get プロシージャから値を返すには、プロパティ名に値を割り当てるか、または Return ステートメントに値を設定します。戻り値を quoteForTheDay という名前のプロパティに割り当てた後、Exit Property ステートメントを使って制御を返すコード例を次に示します。
Private quoteValue As String = "No quote assigned yet."
ReadOnly Property quoteForTheDay() As String
Get
quoteForTheDay = quoteValue
Exit Property
End Get
End Property
name に値を割り当てないで Exit Property を使用すると、Get プロシージャは、そのプロパティのデータ型の既定値を返します。
Return ステートメントは Get プロシージャの戻り値を代入すると同時に、プロシージャを終了します。次に例を示します。
Private quoteValue As String = "No quote assigned yet."
ReadOnly Property quoteForTheDay() As String
Get
Return quoteValue
End Get
End Property