自动实现的属性 (Visual Basic)
“自动实现的属性”使您可以快速指定类的属性,而无需编写代码对该属性执行 Get 和 Set 操作。 在为自动实现的属性编写代码时,除了创建关联的 Get 和 Set 过程之外,Visual Basic 编译器还会自动创建一个私有字段来存储该属性变量。
通过自动实现的属性,可在一行中声明一个包含默认值的属性。 下面的示例演示了三个属性声明。
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
支持字段
在声明自动实现的属性时,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 或 ReadOnly 属性。
使用参数化属性(包括 Default 属性)。 若要为属性指定参数,或者为 Set 过程指定附加参数,必须声明扩展属性。
为支持字段设置特性,或者更改支持字段的访问级别。
为支持字段提供 XML 注释。
扩展自动实现的属性
如果必须将自动实现的属性转换为包含 Get 或 Set 过程的扩展属性,Visual Basic 代码编辑器可以自动为该属性生成 Get 和 Set 过程以及 End Property 语句。 如果将光标放在 Property 语句后面的空行上,键入 G(表示 Get)或 S(表示 Set)并按 Enter,则会生成该代码。 当在 Property 语句末尾按 Enter 时,Visual Basic 代码编辑器会自动为只读和只写属性生成 Get 或 Set 过程。
请参见
任务
如何:声明具有混合访问级别的属性 (Visual Basic)