如何:在 Visual Basic 中声明和调用默认属性

默认属性 是您的代码可以访问,而无需指定它的类或结构属性。当调用命名为类或结构,但不是特性时,因此,上下文允许访问属性的访问, Visual Basic 解析对该类或结构的默认属性的访问,如果存在)。

类或结构最多只能有一个默认属性。但是,您可以重载默认属性和具有该属性的多个版本。

有关更多信息,请参见 Default (Visual Basic)

声明默认属性

  1. 通常的方法声明属性。不要指定 Shared 或 Private 关键字。

  2. 包括 Default 关键字在属性声明。

  3. 为属性指定至少一个参数。您不能定义一个不带任何参数的默认属性。

    Default Property myProperty(ByVal index As Integer) As String
    

调用默认属性

  1. 声明包含的类或结构类型的变量。

    Dim x As New class1(3)
    
  2. 使用单独的变量名。通常包括属性名的表达式。

    MsgBox(x)
    
  3. 变量名后面加上括号将参数列表。默认属性必须具有至少一个参数。

    MsgBox(x(1))
    
  4. 若要检索默认属性值,请使用带有参数列表的变量名,,在表达式中或等于后 (=) 赋值语句中加上等号

    MsgBox(x(1) & x(2) & x(3))
    
  5. 若要设置默认属性值,请使用变量名称,并且在赋值语句的左侧,参数列表。

    x(1) = "Hello"
    x(2) = " "
    x(3) = "World"
    
  6. 就象您访问其他属性,您可以使用变量名一起始终指定默认属性名称。

    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

下面的示例演示如何调用类中 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)

如何:声明具有混合访问级别的属性 (Visual Basic)

如何:调用 Property 过程 (Visual Basic)

如何:在属性中放置值 (Visual Basic)

如何:从属性获取值 (Visual Basic)

参考

Property 语句

Default (Visual Basic)

概念

Property 过程 (Visual Basic)

过程参数和变量 (Visual Basic)

Visual Basic 中属性和变量的差异