Property プロシージャ (Visual Basic)

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

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

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

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

Property プロシージャは、通常は Getステートメントと Set ステートメントを使ってペアで定義しますが、プロパティが読み取り専用 (Get ステートメント) または書き込み専用 (Set ステートメント (Visual Basic)) の場合は、一方のプロシージャだけを定義できます。

自動実装プロパティを使用する場合は、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 an 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
- or -
[Default] [Modifiers] Property PropertyName [(ParameterList)] [As DataType]

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

bc3dtbky.collapse_all(ja-jp,VS.110).gif[データ型]

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

bc3dtbky.collapse_all(ja-jp,VS.110).gifアクセス レベル

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

パラメーター宣言

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

bc3dtbky.collapse_all(ja-jp,VS.110).gif宣言と呼び出しの説明

次のプロパティは、フル ネームをファースト ネームとラスト ネームの 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)

方法: 既定のプロパティを宣言して呼び出す (Visual Basic)

方法: プロパティに値を格納する (Visual Basic)

方法: プロパティから値を取得する (Visual Basic)

概念

Visual Basic におけるプロシージャ

Function プロシージャ (Visual Basic)

演算子プロシージャ (Visual Basic)

プロシージャのパラメーターと引数 (Visual Basic)

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