如何:在 Visual Basic 中声明和调用默认属性
默认属性是代码无需指定即可访问的类或结构属性。 当调用代码命名类或结构而不是属性,并且上下文允许访问属性时,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
下面的示例演示如何在类 class1
上调用默认属性 myProperty
。 三个赋值语句将值存储在 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
,可以在一定程度上减少默认属性错误的可能性。
如果打算在代码中使用预定义的类或结构,则必须确定它是否具有默认属性,如果有,还必须确定其名称。
由于这些缺点,你应考虑不定义默认属性。 为了提高代码可读性,还应考虑始终显式引用所有属性,甚至是默认属性。