默认属性是代码无需指定该属性即可访问的类或结构属性。 在将类或结构命名为代码名而不是属性,并且上下文允许访问属性时,如果该类或结构存在默认属性,Visual Basic 将解析对该默认属性的访问。
类或结构最多可以有一个默认属性。 但是,您可以重载默认属性,并为其创建多个版本。
有关详细信息,请参阅 默认值。
声明默认属性
以正常方式声明属性。 请勿指定
Shared
或Private
关键字。在
Default
属性声明中包括关键字。为属性指定至少一个参数。 不能定义不采用至少一个参数的默认属性。
Default Property myProperty(ByVal index As Integer) As String
调用默认属性
声明包含类或结构类型的变量。
Dim x As New class1(3)
在通常包含属性名称的表达式中单独使用变量名称。
MsgBox(x)
在变量名称后面加上括号中的参数列表。 默认属性必须至少采用一个参数。
MsgBox(x(1))
若要检索默认属性值,请在表达式中使用变量名称和参数列表,或在赋值语句的等号(
=
)符号之后使用变量名称。MsgBox(x(1) & x(2) & x(3))
若要设置默认属性值,请将变量名称与赋值语句左侧的参数列表一起使用。
x(1) = "Hello" x(2) = " " x(3) = "World"
始终可以指定默认属性名称以及变量名称,就像访问任何其他属性一样。
x.myProperty(1) = "Hello" x.myProperty(2) = " " x.myProperty(3) = "World"
示例 1
以下示例在类上声明一个默认属性。
Public Class class1
Private myStrings() As String
Sub New(ByVal size As Integer)
ReDim myStrings(size)
End Sub
Default Property myProperty(ByVal index As Integer) As String
Get
' The Get property procedure is called when the value
' of the property is retrieved.
Return myStrings(index)
End Get
Set(ByVal Value As String)
' The Set property procedure is called when the value
' of the property is modified.
' The value to be assigned is passed in the argument
' to Set.
myStrings(index) = Value
End Set
End Property
End Class
示例 2
下面的示例演示如何在类myProperty
上调用默认属性class1
。 三个赋值语句将值存储在其中 myProperty
,调用 MsgBox 将读取值。
Sub Test()
Dim x As New class1(3)
x(1) = "Hello"
x(2) = " "
x(3) = "World"
MsgBox(x(1) & x(2) & x(3))
End Sub
默认属性最常见的用途是在各种集合类上的 Item[] 属性。
可靠的编程
默认属性可能会导致源代码字符减少,但它们会使代码更易于阅读。 如果调用代码不熟悉类或结构,则当调用代码引用类或结构名称时,它无法确定该引用是访问类或结构本身还是默认属性。 这可能会导致编译器错误或微妙的运行时逻辑错误。
可以通过始终使用 Option Strict 语句 将编译器类型检查设置为 On
来减少默认属性相关错误的可能性。
如果打算在代码中使用预定义的类或结构,则必须确定它是否具有默认属性,如果是,则其名称是什么。
由于这些缺点,应考虑不定义默认属性。 对于代码可读性,还应考虑始终显式引用所有属性,甚至默认属性。