屬性和屬性程序
更新:2007 年 11 月
您可使用屬性和欄位將資訊儲存於物件中。欄位只是公用變數,屬性則是使用屬性程序控制設定或傳回值的方法。屬性程序是在屬性定義中宣告的程式碼區塊,讓您可在設定或擷取屬性值時執行程式碼。
Visual Basic 具有兩種屬性程序:可擷取屬性值的 Get 屬性程序,以及可指派屬性值的 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 修飾詞 (Modifier) 來限制屬性被修改或讀取。
唯讀屬性不能具有 Set 屬性程序;對於您想要 公開 (Expose) 但不允許修改的項目很有用。例如,您可以利用唯讀屬性來提供電腦處理器的速度。
唯寫屬性不能擁有 Get 屬性程序,適合用來設定不得或不能儲存資料的物件。例如,唯寫屬性可用於取得密碼,以及變更物件狀態而不需儲存密碼。
注意事項: |
---|
舊版本的 Visual Basic 支援指派物件給屬性時的 Let 屬性程序。Visual Basic 不需要 Let 屬性程序,因為物件指派的處理方式與任何其他指派類型相同。 |