Property プロシージャ

更新 : 2007 年 11 月

Property プロシージャは、モジュール、クラス、または構造体のカスタム プロパティを操作する一連の Visual Basic ステートメントです。Property プロシージャは、プロパティ アクセサとも呼ばれます。

Visual Basic には次の Property プロシージャが用意されています。

  • Get プロシージャは、プロパティの値を返します。式の中でプロパティにアクセスするときに呼び出されます。

  • Set プロシージャは、プロパティに値 (オブジェクト参照を含む) を設定します。プロパティに値を代入するときに呼び出されます。

Property プロシージャは、通常は Getステートメントと Set ステートメントを使ってペアで定義しますが、プロパティが読み取り専用 (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 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

modifiers はアクセス レベルの他、オーバーロード、オーバーライド、共有、シャドウに関する情報、またはプロパティが読み取り専用か、書き込み専用かを指定します。Get プロシージャまたは Set プロシージャの accesslevel には、プロパティそのものに指定されたアクセス レベルよりも制限の多いレベルをどれでも指定できます。詳細については、「Property ステートメント」を参照してください。

データ型

プロパティのデータ型とアクセス レベルは、Property プロシージャではなく、Property ステートメントに定義します。プロパティに定義できるデータ型は 1 つだけです。たとえば、Decimal 型で値を格納するが、Double 型の値を取得するようなプロパティを定義することはできません。

アクセス レベル

プロパティ自体に定義したアクセス レベルよりも制限の多いアクセスレベルを、Property プロシージャに定義できます。たとえば、Public プロパティを定義しておいて、Private Set プロシージャを定義するなどが可能です。このとき、一方の Get プロシージャは Public のままです。一方の Property プロシージャのアクセス レベルだけを変更できます。また、プロパティ自体のアクセス レベルよりも制限の多いレベルにしか変更できません。詳細については、「方法 : 複数のアクセス レベルを持つプロパティを宣言する」を参照してください。

パラメータ宣言

各パラメータの宣言は、Sub プロシージャの場合と同じ方法で行います。ただし、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 におけるプロシージャ

Function プロシージャ

演算子プロシージャ

プロシージャのパラメータと引数

Visual Basic のプロパティと変数の違い