如何:在 Visual Basic 中声明和调用默认属性
默认属性是一个类或结构属性,无需指定该属性,您的代码即可访问。 当调用代码对一个类或结构但不是属性命名并且上下文允许访问属性时,Visual Basic 解析对该类或结构的默认属性(如果存在)的访问权限。
一个类或结构最多可以有一项默认属性。 但是,您可以重载默认属性,并且可以具有该属性的多个版本。
有关更多信息,请参见Default (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"
示例
下面的示例声明类中的一个默认属性。
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
此代码示例也可用作 IntelliSense 代码段。 在代码段选择器中,它位于**“Visual Basic 语言”**中。 有关更多信息,请参见如何:插入 IntelliSense 代码段。
下面的示例演示如何调用类 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,可以在某种程度上降低默认属性错误的机会。
如果您计划在代码中使用预定义类或结构,则必须确定它是否具有默认属性;如果有,还必须确定其名称。
由于存在这些缺点,您应该考虑不定义默认属性。 为了代码的可读性,您还应考虑始终显式引用所有属性,包括默认属性。
请参见
任务
如何:声明具有混合访问级别的属性 (Visual Basic)
如何:调用 Property 过程 (Visual Basic)