Property ステートメント

プロパティの値を格納および取得するために使用するプロパティ、およびプロパティ プロシージャの名前を宣言します。

[ <attributelist> ] [ Default ] [ accessmodifier ] 
[ propertymodifiers ] [ Shared ] [ Shadows ] [ ReadOnly | WriteOnly ] [ Iterator ]
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)」を参照してください。

Iterator

省略可能。[反復子]を参照してください。

name

必須。プロパティ名です。「宣言された要素の名前 (Visual Basic)」を参照してください。

parameterlist

省略可能。このプロパティのパラメーター、および Set プロシージャのパラメーター (あれば) を表すローカル変数名の一覧です。「パラメーターの一覧 (Visual Basic)」を参照してください。

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 プロシージャ (書き込み専用)、またはその両方 (読み取り/書き込み) を定義できます。自動実装プロパティを使用する場合は、Get プロシージャおよび Set プロシージャを省略できます。詳細については、「自動実装プロパティ (Visual Basic)」を参照してください。

Property は、クラス レベルでのみ使用できます。つまり、プロパティの宣言コンテキストは、クラス、構造体、モジュール、またはインターフェイスであることが必要で、ソース ファイル、名前空間、プロシージャ、ブロックでは宣言できません。詳細については、「宣言コンテキストと既定のアクセス レベル (Visual Basic)」を参照してください。

プロパティは、既定でパブリック アクセスを使用します。プロパティのアクセスレベルは、Property ステートメントにアクセス修飾子を指定することによって変更できます。また、必要に応じて、一方のプロパティ プロシージャを、より制限の高いアクセス レベルに変更することも可能です。

Visual Basic は、プロパティの割り当ての際に、パラメーターを Set プロシージャに渡します。Set のパラメーターを指定しないと、統合開発環境 (IDE: Integrated Development Environment) では 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

参照

関連項目

Get ステートメント

Set ステートメント (Visual Basic)

パラメーターの一覧 (Visual Basic)

Default (Visual Basic)

概念

自動実装プロパティ (Visual Basic)

その他の技術情報

Visual Basic のオブジェクトとクラス