プロパティ

提供: AB開発Wiki
移動先:案内検索

プロパティは、クラスのメンバにアクセスする要領でメソッド呼び出しを行う概念です。 プロパティを使用すると、直観的な表現によってソースコードの可読性の向上が期待できます。

プロパティの定義

プロパティを定義するには、定義したいプロパティの名前と同名のメソッドを定義します。 具体的な定義方法はクラス#メソッドの定義を参照してください。

Get アクセッサ

プロパティを評価する操作は、そのプロパティと同じ名前で引数を持たない同名のメソッドの呼び出しに置換されます。 値を取得 (get) するので、このメソッドをGetアクセッサといいます。

Set アクセッサ

プロパティに値を代入する操作は、そのプロパティと同じ名前で引数が 1 つのメソッドの呼び出しに置換されます。 値を代入 (set) するので、このメソッドをSetアクセッサといいます。

使用例

具体的なプロパティの使用方法を示します。

Class CFoo
    m_value As Long
Public
    ' Value プロパティの定義
    ' Get アクセッサ
    Function Value() As Long
        Value = m_value
    End Function

    ' Set アクセッサ
    Sub Value(num As Long)
        ' num は 1 .. 100 の範囲内でなければならないとする
        If (num < 1) Or (num > 100) Then
            ' num が範囲外なので、ここで何らかのエラー処理を行う
        Else
            m_value = num
        End If
    End Sub
End Class

Dim x As CFoo
'x.m_value = 10 ' NG: m_value は CFoo クラスの Private メンバなので、直接アクセスはできない。

' 次の 2 文は等価
x.Value = 10    ' Value プロパティへの代入
x.Value(10)     ' Value() メソッド(Set アクセッサ)の呼び出し

Dim y As Long
' 次の 2 文は等価
y = x.Value     ' Value プロパティの取得
y = x.Value()   ' Value() メソッド(Get アクセッサ)の呼び出し

メソッドのプロパティ性

0 個ないし 1 個の引数を持つメソッドはすべてプロパティとなりえます。プロパティへのアクセスはメソッドの呼び出しと完全に等価です。 よって、クラスの提供者がメソッドとして呼び出されることを意図して設計したとしても、クラスの利用者はその意図を無視してプロパティとしてアクセスできます。 逆に、クラスの提供者がプロパティとして呼び出されることを意図して定義したメソッドを、通常のメソッドとして呼び出すこともできます。 このように設計者の意図に反した形式でプロパティ/メソッドを使用してもプログラムの動作に支障はありませんが、コードの可読性はかえって低下するおそれがあります。 プロパティを使用するときは以上のことをよく心得ておいてください。