自动实现的属性 (Visual Basic)
自动实现的属性使你能够快速指定类的属性,而无需向和Set
属性编写代码Get
。 为自动实现的属性编写代码时,Visual Basic 编译器除了创建关联 Get
和 Set
过程之外,还会自动创建一个专用字段来存储属性变量。
使用自动实现的属性,属性(包括默认值)可以在单行中声明。 下面的示例演示三个属性声明。
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
以下代码演示如何实现只读属性:
Class Customer
Public ReadOnly Property Tags As New List(Of String)
Public ReadOnly Property Name As String = ""
Public ReadOnly Property File As String
Sub New(file As String)
Me.File = file
End Sub
End Class
可以使用初始化表达式分配给属性(如示例中所示),也可以在包含类型的构造函数中分配给属性。 可以随时分配给只读属性的支持字段。
支持字段
声明自动实现的属性时,Visual Basic 会自动创建一 个名为后盾字段的隐藏私有字段 来包含属性值。 后盾字段名称是自动实现的属性名称,前面是下划线(_)。 例如,如果声明了名为 ID
“自动实现的属性”,则命名后盾字段 _ID
。 如果包含一个也名为 _ID
的类成员,则会形成命名冲突,Visual Basic 会报告编译器错误。
支持字段还具有下列特征:
支持字段的访问修饰符始终是
Private
,即使在属性本身具有不同访问级别(如Public
)时也是如此。如果属性标记为
Shared
,则支持字段也进行共享。为属性指定的属性不适用于支持字段。
可以从类中的代码以及从调试工具(如监视窗口)访问支持字段。 但是,支持字段不显示在 IntelliSense 文字自动完成列表中。
初始化自动实现的属性
可用于初始化字段的任何表达式都可用于初始化自动实现的属性。 初始化自动实现的属性时,将计算表达式并将其传递给 Set
该属性的过程。 下面的代码示例显示了一些自动实现的属性,这些属性包括初始值。
Property FirstName As String = "James"
Property PartNo As Integer = 44302
Property Orders As New List(Of Order)(500)
不能初始化自动实现的属性,该属性是一个 Interface
成员或标记 MustOverride
的属性。
将自动实现的属性声明为成员 Structure
时,仅当属性被标记为 Shared
时,才能初始化自动实现的属性。
将自动实现的属性声明为数组时,不能指定显式数组边界。 但是,可以使用数组初始值设定项提供值,如下面的示例所示。
Property Grades As Integer() = {90, 73}
Property Temperatures As Integer() = New Integer() {68, 54, 71}
需要标准语法的属性定义
自动实现的属性很方便,支持许多编程方案。 但是,在某些情况下,不能使用自动实现的属性,必须改用标准或 扩展的属性语法。
如果要执行以下任一操作,则必须使用扩展属性定义语法:
向属性的
Get
或Set
过程添加代码,如用于在Set
过程中验证传入值的代码。 例如,你可能要在设置属性值之前验证表示电话号码的字符串是否包含所需数量的数字。为
Get
和Set
过程指定不同的可访问性。 例如,你可能要使Set
过程是Private
,要使Get
过程是Public
。创建作为
WriteOnly
的属性。使用参数化的属性(包括
Default
属性)。 必须声明扩展属性才能为属性指定参数或是为Set
过程指定附加参数。将属性置于支持字段上,或更改支持字段的访问级别。
为支持字段提供 XML 注释。
扩展自动实现的属性
如果必须将自动实现的属性转换为包含Get
或Set
过程的扩展属性,Visual Basic Code 编辑器可以自动生成Get
Set
该属性的过程和End Property
语句。 如果将光标置于 Property
语句后的空白行上,键入 G
(对于 Get
)或 S
(对于 Set
),然后按 ENTER,则会生成代码。 在 Property
语句末尾按 Enter 时,Visual Basic 代码编辑器会为只读和只写属性自动生成 Get
或 Set
过程。