Navicy's .NET

天将降大任于斯人也,必先苦其心智,劳其筋骨,饿其体肤,空乏其身......

导航

VB中类的字段和属性的区别和用法

类由字段、属性、方法和事件组成。字段和属性表示对象包含的信息。字段类似于变量,因为可以直接读取或设置它们。例如,如果有一个名为 Car 的对象,则可以在名为 Color 的字段中存储其颜色。属性的检索和设置方法与字段类似,但是属性是使用 Property Get 和 Property Set 过程实现的,这些过程对如何设置或返回值提供更多的控制。在存储值和使用此值的过程之间的间接层帮助隔离数据,并使您得以在分配或检索值之前验证这些值。

向类添加字段
在类定义中声明一个公共变量,如下面的代码所示:

Class ThisClass 
   
Public ThisField As String 
End Class 

向类添加属性
在类中声明一个局部变量来存储属性值。因为属性不会自行分配任何存储区,所以该步骤是必需的。若要保护它们的值不被直接修改,用于存储属性值的变量应当声明为 Private。
根据需要以修饰符(如 Public 和 Shared)作为属性声明的开头。使用 Property 关键字声明属性名称,并声明属性存储和返回的数据类型。
在属性定义中定义 Get 和 Set 属性过程。Get 属性过程用于返回属性值,基本等效于语法中的函数。它们不接受参数,可用于返回在类中声明的、用于存储属性值的私有局部变量的值。Set 属性过程用于设置属性的值,它们有参数(通常称为 Value),该参数的数据类型与属性本身的数据类型相同。每当属性值更改时,Value 均会被传递给 Set 属性过程,在该过程中可以验证它并将其存储在一个局部变量中。
根据需要使用 End Get 和 End Set 语句终止 Get 和 Set 属性过程。
使用 End Property 语句终止属性块。
注意   如果正在 Visual Studio 集成开发环境 (IDE) 下工作,可以指示它去除空的 Get 和 Set 属性过程。键入 Property PropName As DataType(其中,PropName 是属性名称,DataType 是特定数据类型,如 Integer),相应的属性过程将出现在代码编辑器中。
下面的示例在类中声明一个属性:

Class ThisClass 
   
Private m_PropVal As String 
   
Public Property One() As String 
      
Get 
         
Return m_PropVal ' Return the value stored in the local variable. 
       ' Optionally, you can use the syntax One = PropVal to return 
       ' the property value. 
      End Get 
      
Set(ByVal Value As String
         m_PropVal 
= Value ' Store the value in a local variable. 
      End Set 
   
End Property 
End Class 

当创建 ThisClass 的一个实例并设置 One 属性的值时,将调用 Set 属性过程且该值在 Value 参数中传递,该参数存储在名为 m_PropVal 的局部变量中。当检索此属性值时,将像函数那样调用 Get 属性过程并返回存储在局部变量 m_PropVal 中的值。

属性和属性过程
可以使用属性和字段在对象中存储信息。属性使用属性过程控制如何设置或返回值,而字段只是公共变量。属性过程是在属性定义中声明的代码块,使您可以在设置或检索属性值时执行代码。Visual Basic .NET 有两种类型的属性过程:Get 属性过程用于检索属性值;Set 属性过程用于向属性赋值。例如,存储银行帐户余额的属性可能会在 Get 属性过程中使用代码以在返回可用余额之前记入利息并检查服务费。用于可用余额的 Set 属性过程会提供验证代码以防止不正确地更新余额。简而言之,属性过程允许对象保护和验证自己的数据

只读和只写属性
大多数属性有 Get 和 Set 这两个属性过程以使您可以同时读取和修改所存储的值。然而,您可以使用 ReadOnly 或 WriteOnly 修饰符来限制对属性的读取或修改。只读属性不能有 Set 属性过程,它们可用于需要公开但不允许修改的项。例如,可以使用只读属性来提供计算机处理器的速度。只写属性不能有 Get 属性过程,它们可用于需要存储但不对其他对象公开的数据。例如,只写属性可以用于存储密码。

注意   在将对象分配给属性时,Visual Basic 的早期版本支持使用 Let 属性过程。Visual Basic .NET 消除了对 Let 属性过程的需要,因为可以像处理其他任何种类的分配那样处理对象分配。

属性过程与字段
属性与字段都可在对象中存储和检索信息。它们的相似性使得在给定情况下很难确定哪个是更好的编程选择。

在以下情况下使用属性过程:
需要控制设置或检索值的时间和方式时。
属性有定义完善的一组值需要进行验证时。
设置值会导致对象状态中发生某些可察觉更改(如一个可见属性)时。
设置属性会导致更改其他内部变量或其他属性的值时。
必须先执行一组步骤,然后才能设置或检索属性时。

在以下情况下使用字段:
值为自验证类型时。例如,如果将 True 或 False 以外的值分配给 Boolean 变量,就会发生错误或自动数据转换。
在数据类型所支持范围内的任何值均有效时。Single 或 Double 类型的很多属性属于这种情况。
属性是 String 数据类型,且对于字符串的大小或值没有任何约束时。

posted on 2005-11-17 12:11  Navicy  阅读(5470)  评论(0编辑  收藏  举报