属性和属性过程

更新: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 修饰符来限制对属性进行修改或读取。

只读属性不能具有 Set 属性过程。这种属性用于需要公开但不允许修改的项。例如,可以使用只读属性来提供计算机处理器的速度。

只写属性不能具有 Get 属性过程,它们用于使用不应或不能存储在对象中的数据配置对象。例如,只写属性可用于获取密码并在不存储该密码的情况下更改对象的状态。

说明:

Visual Basic 的以前版本支持在为属性分配对象时使用 Let 属性过程。Visual Basic 消除了对 Let 属性过程的需要,因为处理对象分配就像处理任何其他种类的分配一样。

请参见

概念

Property 过程

属性过程与字段

参考

Get 语句

Set 语句 (Visual Basic)

ReadOnly (Visual Basic)

WriteOnly