默认属性更改(针对 Visual Basic 6.0 用户)
更新:2007 年 11 月
Visual Basic 2008 更新了默认属性支持,旨在简化操作并提高可读性。
Visual Basic 6.0
在 Visual Basic 6.0 中,默认属性在对象中得到支持。例如,在 Label 控件中,Caption 是默认属性,下例中的两个赋值等效。
Dim lbl As Label
lbl = "Important"
lbl.Caption = "Important"
在编写 Visual Basic 代码时,默认属性启用了一定数量的简写形式,但它们有几个缺点:
使代码难以阅读。在上一个示例中,如果您不熟悉 Label 控件,则不能从第一个赋值中断定字符串 "Important" 是直接存储在变量 lbl 中,还是存储在默认属性中。
对于计划在代码中使用的对象,总是不容易知道它是否有默认属性,如果有,是哪个属性。
在 Visual Basic 语言中,默认属性使 Set 语句成为必要的语句。下面的示例说明如何需要使用 Set 来指示对对象引用赋值而不是对默认属性赋值。
Dim lbl1 As Label, lbl2 As Label lbl1 = "Saving" ' Assign a value to lbl1's Caption property. lbl2 = lbl1 ' Replace lbl2's Caption property with lbl1's. Set lbl2 = lbl1 ' Replace lbl2 with an object reference to lbl1.
Visual Basic 2008
在 Visual Basic 2008 中,除非默认属性带有参数,否则不支持它们。由于这种语法更改,不需要使用 Let 和 Set 语句来指定赋值的内容,因而赋值语句中不使用这两个语句。Text 属性取代了 Label 控件上的 Caption 属性,因此可以按如下所示重新编写前面的示例。
Dim L1, L2 As New Label ' Both become type Label
' in the new version of Visual Basic.
L1.Text = "Saving" ' Assign Text property.
L2.Text = L1.Text ' Copy Text property.
L2 = L1 ' Copy object reference.
即使 Let 没有语法用法,它仍是 Visual Basic 2008 中的保留字。这有助于避免与它以前的含义发生混淆。Visual Basic 2008 将 Set 语句用于设置属性值的属性过程。
参数化属性
带有参数的默认属性是明确的,它们在 Visual Basic 2008 中也得到支持。默认属性最常出现在集合类中。例如,在 System.Windows.Forms 命名空间中,Form 类支持以下层次结构:
Form 对象
Controls 属性(返回此窗体的 Control.ControlCollection 对象)
Control.ControlCollection 对象(默认属性是 Item)
Control 对象
Controls 属性返回 Control.ControlCollection 对象,Item 属性返回 Control 对象。下面的示例演示 Visual Basic 2008 中默认属性的有效用法和无效用法。
Dim F As New Form ' Assume F has been created and initialized.
F.Controls.Item(0).Text = "Stop" ' Valid -- no default properties used.
F.Controls(0).Text = "Stop" ' Valid -- Item is parameterized.
'F(0).Text = "Stop" ' INVALID -- Form does not have a default property.
'F.Controls(0) = "Stop" ' INVALID -- No default property on Control.
默认属性声明
在 Visual Basic 2008 中,通过将 Default 关键字放在声明的开头,可将某个属性指定为默认属性。如果重载了属性名,则必须在每个重载声明中指定 Default。不能将默认属性声明为 Shared 或 Private。
请参见
概念
属性过程更改(针对 Visual Basic 6.0 用户)