自动实现属性

自动实现属性Auto-Implemented Properties (Visual Basic)

自动实现属性允许您快速定义类的属性,而不用编写代码来获取和设置属性。当您编写了自动实现属性,Visual Basic 编译器不仅自动创建 Get 和 Set 子过程,还创建私有字段(private field)来存储属性变量(property variable)。

有了自动实现属性,属性和默认值就可以在单行代码中声明。下面代码演示了3个属性的声明(declaration)。

Public Property Name As String

Public Property Owner As String = "DefaultName"

Public Property Items As New List(Of String) From {"M", "T", "W"}

Public Property ID As New Guid()

自动实现属性等同于属性值存储在私有字段的属性,下面代码演示自动实现属性。

Property Prop2 As String = "Empty"

下面代码展示上面自动实现属性的等价形式:

Private _Prop2 As String = "Empty"

Property Prop2 As String

Get

Return _Prop2

End Get

Set(ByVal value As String)

_Prop2 = value

End Set

End Property

背后字段Backing Field

当你声明一个自动实现属性,Visual Basic 自动创建一个称为背后字段(backing field)的隐藏私有字段来存储属性值。背后字段的名称是自定义属性名加了下划线。例如,定义一个名为 ID 的自动实现属性,背后字段就是 _ID,如果您的类中包含成员 _ID,将产生名字冲突,Visual Basic 会报告编译错误。

背后字段有下面的特性:

  • 背后字段的访问修饰符(access modifier)总是 private,尽管属性有其它的存储级别,如 public。
  • 如果属性标识为Shared,背后字段也是Shared。
  • 修饰属性的属性类(Attribute)不会应用到背后字段。
  • 背后字段可以在类的代码中访问,或在调试工具如 Watch 窗口中访问。然而,背后字段不会在智能提示列表中显示。

初始化自动实现属性

任何可以初始化字段的表达式,都能用来初始化自动实现属性。当你初始化自动实现属性时,表达式被计算,然后传给属性的 Set 子过程。下面代码展示包含初始值的自动实现属性。

Property FirstName As String = "James"

Property PartNo As Integer = 44302

Property Orders As New List(Of Order)(500)

若自动实现属性是接口(Interface)或者标识为 MustOverride的类的成员,不可以初始化。

若自动实现属性是结构体(Structure )的成员,只有自动实现属性标识为 Shared 时才可初始化。

若将自动实现属性声明为数组,不可以给数组标识精确边界。然而,您可以用数组初始化器(array initializer)来赋值,像下面这样:

Property Grades As Integer() = {90, 73}

Property Temperatures As Integer() = New Integer() {68, 54, 71}

必须用标准语法的属性定义

自动实现属性非常方便,而且适用于许多编程场合。然而有许多情形,您不能使用自动实现属性,而必须使用标准的或者扩展的(expanded)属性语法。

您如果想做下面的事情,必须使用扩展的属性定义语法:

  • 在 Get 或 Set 子过程中添加代码。例如,你在设置电话号码属性值前,希望验证字符串是否包含正确位数。
  • 给 Get 和 Set 子过程标识不同的访问性(accessibility)。例如,你想把 Set 子过程标识为 Private 而把 Get 子过程标识为 Public。
  • 创建 WriteOnly 或 ReadOnly 的属性。
  • 使用参数化的属性(包含默认属性)。您必须声明一个扩展的属性来给属性标识参数,或者给 Set 子过程标识额外参数。
  • 给背后字段限定属性类(attribute)。
  • 给背后字段提供 XML 注释。

扩展自动实现属性

如果您希望将自动实现属性转换为包含 Get 或 Set 子过程的扩展属性,Visual Basic 代码编辑器可以给属性自动生成 Get 和 Set 子过程和 End Property 语句。做法是:将光标定位在属性语句的下一空白行,输入 G(Get首字母)或 S(Set首字母),等智能提示框弹出后再按下 Enter 键。若在只读或只写属性语句尾部按下 Enter 键,Visual Basic 代码编辑器自动生成 Get 或 Set 子过程。

posted @ 2010-05-15 20:30  Felix Liang  阅读(347)  评论(0编辑  收藏  举报