プロパティとプロパティ プロシージャ
更新 : 2007 年 11 月
プロパティとフィールドのどちらを使用しても、オブジェクトに情報を格納できます。フィールドは単なるパブリック変数ですが、プロパティは、プロパティ プロシージャを使用して、値を設定する方法や値を返す方法を制御します。プロパティ プロシージャは、プロパティ定義内で宣言されるコードのブロックです。プロパティ値が設定または取得されるときにコードを実行する場合に使用できます。
Visual Basic には、2 種類のプロパティ プロシージャがあります。1 つはプロパティ値を取得するための Get プロパティ プロシージャ、もう 1 つはプロパティに値を代入するための Set プロパティ プロシージャです。たとえば、銀行口座の残高を格納するプロパティで Get プロパティ プロシージャのコードを使用すると、利子を加え、サービス料を確認してから、利用可能な残高を返すことができます。また、Set プロパティ プロシージャを使用すると、残高を確認することや、不正確に更新されるのを防ぐことができます。このように、プロパティ プロシージャによって、オブジェクトのデータを保護および検証できます。
フィールドの値およびプロパティの値を検証する方法の比較を次のコード例に示します。
Protected Sub TestFieldsAndProperties()
' Assume, for this example, that the only valid values for
' the field and property are numbers less than 10.
Dim NewClass As New ThisClass
' Test data validation.
' Works because there is no data validation.
NewClass.ThisField = 36
' Will print 36.
MsgBox("ThisField = " & NewClass.ThisField)
' The attempt to set the field to a value greater than 10 will silently fail.
NewClass.ThisProperty = 36
' The next statement will print the old value of 0 instead.
MsgBox("ThisProperty = " & NewClass.ThisProperty)
End Sub
Public Class ThisClass
' Declare a field.
Public ThisField As Integer
' Field used for Property Set operations.
Private thisPropertyValue As Integer = 0
' Declare a property.
Public Property ThisProperty() As Integer
Get
Return thisPropertyValue
End Get
Set(ByVal Value As Integer)
' Only allow Set operation for values less than 10.
If Value < 10 Then thisPropertyValue = Value
End Set
End Property
End Class
TestFieldsAndProperties プロシージャは、クラスのインスタンスを作成し、フィールドおよびプロパティの値を設定および取得します。この例では、有効な数値は 10 未満です。フィールドの場合、代入された値を検証する方法がないため、フィールドの値は 36 に設定されてしまいます。プロパティの場合は、10 未満の数値に対してだけ代入が実行されるため、36 に設定しようとする操作は無視されます。
読み取り専用プロパティと書き込み専用プロパティ
ほとんどのプロパティには、Get プロパティ プロシージャと Set プロパティ プロシージャの両方があり、格納されている値の読み取りと変更に使用できます。ただし、ReadOnly 修飾子または WriteOnly 修飾子を使用すると、プロパティ値の変更または読み取りを制限できます。
読み取り専用プロパティには Set プロパティ プロシージャを指定できません。読み取り専用プロパティは、公開はするが変更は許可しない項目の場合に有用です。読み取り専用プロパティは、たとえば、コンピュータのプロセッサの速度を示す場合に使用できます。
書き込み専用プロパティには Get プロパティ プロシージャを指定できません。書き込み専用プロパティは、そのオブジェクト内に保存しておくことが望ましくないデータや保存できないデータを扱うオブジェクトを設定する場合に便利です。書き込み専用プロパティは、たとえば、パスワードを要求するオブジェクトで、パスワードを格納せずにオブジェクトの状態のみ変更する場合に使用できます。
メモ : |
---|
Visual Basic の以前のバージョンでは、オブジェクトをプロパティに代入するときに使用する Let プロパティ プロシージャをサポートしていました。Visual Basic では、オブジェクトの代入は他の代入処理と同様に処理されるようになったため Let プロパティ プロシージャは必要なくなりました。 |