共用方式為


屬性和屬性程序

更新: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 屬性程序,因為物件指派的處理方式與任何其他指派類型相同。

請參閱

概念

Property 程序

屬性程序和欄位

參考

Get 陳述式

Set 陳述式 (Visual Basic)

ReadOnly (Visual Basic)

WriteOnly