Property ステートメント
プロパティの値を設定および取得するためのプロパティ プロシージャ、およびプロパティの名前を宣言します。
[ <attributelist> ] [ Default ] [ accessmodifier ]
[ propertymodifiers ] [ Shared ] [ Shadows ] [ ReadOnly | WriteOnly ]
Property name ( [ parameterlist ] ) [ As returntype ] [ Implements implementslist ]
[ <attributelist> ] [ accessmodifier ] Get
[ statements ]
End Get
[ <attributelist> ] [ accessmodifier ] Set ( ByVal value As returntype [, parameterlist ] )
[ statements ]
End Set
End Property
- or -
[ <attributelist> ] [ Default ] [ accessmodifier ]
[ propertymodifiers ] [ Shared ] [ Shadows ] [ ReadOnly | WriteOnly ]
Property name ( [ parameterlist ] ) [ As returntype ] [ Implements implementslist ]
指定項目
語句 |
定義 |
attributelist |
省略可能です。 このプロパティ、または Get プロシージャや Set プロシージャに適用される属性の一覧を指定します。 「属性リスト」を参照してください。 |
Default |
省略可能です。 このプロパティが、クラスまたは構造体の既定のプロパティであることを指定します。 既定のプロパティはパラメーターをとる必要があり、プロパティ名を指定しなくても取得や設定を行うことができます。 プロパティを Default として宣言すると、このプロパティや 2 つのプロパティ プロシージャのいずれかに Private を指定できなくなります。 |
accessmodifier |
省略可能です。Property ステートメントと、Get か Set の一方のステートメントに指定できます。 次のいずれかの値を指定します。 「Visual Basic でのアクセス レベル」を参照してください。 |
propertymodifiers |
省略可能です。 次のいずれかの値を指定します。
|
Shared |
省略可能です。 「Shared (Visual Basic)」を参照してください。 |
Shadows |
省略可能です。 「Shadows (Visual Basic)」を参照してください。 |
ReadOnly |
省略可能です。 「ReadOnly (Visual Basic)」を参照してください。 |
WriteOnly |
省略可能です。 「WriteOnly (Visual Basic)」を参照してください。 |
name |
必ず指定します。 プロパティ名。 「宣言された要素の名前 (Visual Basic)」を参照してください。 |
parameterlist |
省略可能です。 このプロパティのパラメーター、および Set プロシージャのパラメーター (あれば) を表すローカル変数名の一覧です。 「パラメーターの一覧 (Visual Basic)」を参照してください。 |
returntype |
Option Strict が On の場合は、必ず指定します。 このプロパティによって返される値のデータ型を指定します。 |
Implements |
省略可能です。 このプロパティが実装する 1 つ以上の各プロパティが、このプロパティの包含クラスまたは包含構造体によって実装されるインターフェイスに定義されていることを示します。 「Implements ステートメント」を参照してください。 |
implementslist |
Implements が指定されている場合は、必ず指定します。 実装されるプロパティの一覧。 implementedproperty [ , implementedproperty ... ] implementedproperty の構文と指定項目は次のとおりです。 interface.definedname
指定項目説明
interface 必ず指定します。このプロパティの包含クラスまたは包含構造体によって実装されるインターフェイスの名前。
definedname 必ず指定します。interface の中で、プロパティを定義するために使われている名前を指定します。
|
Get |
省略可能です。 プロパティが WriteOnly でマーク付けされている場合は必ず指定します。 プロパティの値を返すための Get プロパティ プロシージャを開始します。 |
statements |
省略可能です。 Get プロシージャまたは Set プロシージャの内部で実行するステートメントのブロック。 |
End Get |
Get プロパティ プロシージャを終了します。 |
Set |
省略可能です。 プロパティが ReadOnly でマーク付けされている場合は必ず指定します。 プロパティの値を格納するための Set プロパティ プロシージャを開始します。 |
End Set |
Set プロパティ プロシージャを終了します。 |
End Property |
このプロパティの定義を終了します。 |
解説
Property ステートメントは、プロパティを宣言するときに指定します。 プロパティには Get プロシージャ (読み取り専用)、Set プロシージャ (書き込み専用)、またはその両方 (読み取り/書き込み) を定義できます。 自動実装プロパティを使用する場合は、Get プロシージャおよび Set プロシージャを省略できます。 詳細については、「自動実装プロパティ (Visual Basic)」を参照してください。
Property は、クラス レベルでのみ使用できます。 つまり、プロパティの宣言コンテキストは、クラス、構造体、モジュール、またはインターフェイスであることが必要で、ソース ファイル、名前空間、プロシージャ、ブロックでは宣言できません。 詳細については、「宣言コンテキストと既定のアクセス レベル (Visual Basic)」を参照してください。
プロパティは、既定でパブリック アクセスを使用します。 プロパティのアクセスレベルは、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
使用例
クラス内にプロパティを宣言するコード例を次に示します。
Class Class1
' Define a local variable to store the property value.
Private propertyValue As String
' Define the property.
Public Property prop1() As String
Get
' The Get property procedure is called when the value
' of a property is retrieved.
Return propertyValue
End Get
Set(ByVal value As String)
' The Set property procedure is called when the value
' of a property is modified. The value to be assigned
' is passed in the argument to Set.
propertyValue = value
End Set
End Property
End Class