Property ステートメント
更新 : 2007 年 11 月
プロパティの値を設定および取得するためのプロパティ プロシージャ、およびプロパティの名前を宣言します。
[ <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
指定項目
attributelist
省略可能です。このプロパティ、または Get プロシージャや Set プロシージャに適用される属性の一覧を指定します。「属性リスト」を参照してください。Default
省略可能です。このプロパティが、クラスまたは構造体の既定のプロパティであることを指定します。既定のプロパティはパラメータをとる必要があり、プロパティ名を指定しなくても取得や設定を行うことができます。プロパティを Default として宣言すると、このプロパティや 2 つのプロパティ プロシージャのいずれかに Private を指定できなくなります。accessmodifier
省略可能です。Property ステートメント、および Get ステートメントと Set ステートメントのうちの最大 1 つに指定します。次のいずれかを指定できます。Visual Basic でのアクセス レベル を参照してください。
propertymodifiers
省略可能です。次のいずれかになります。MustOverride Overrides
NotOverridable Overrides
Shared
省略可能です。Shared (Visual Basic) を参照してください。Shadows
省略可能です。Shadows を参照してください。ReadOnly
省略可能です。ReadOnly (Visual Basic) を参照してください。WriteOnly
省略可能です。WriteOnly を参照してください。name
必ず指定します。プロパティ名。宣言された要素の名前 を参照してください。parameterlist
省略可能です。このプロパティのパラメータ、および Set プロシージャのパラメータ (あれば) を表すローカル変数名の一覧です。パラメータの一覧 を参照してください。returntype
OptionStrict が 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 プロシージャ (書き込み専用)、またはその両方 (読み取り/書き込み) を定義できます。
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
使用例
クラス内にプロパティを宣言するコード例を次に示します。
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