升级建议:使用早期绑定的转换和显式转换

更新:2007 年 11 月

Visual Basic 6.0 和 Visual Basic 2008 都支持使用后期绑定对象,方法是将变量声明为 Object 数据类型,并在运行时将其分配给类的一个实例。但在升级过程中,解析默认属性时,或当基础对象模型已经更改且需要转换属性、方法和事件时,后期绑定的对象可能会产生错误。例如,假设有一个名为 Form1 的窗体,该窗体的标签为 Label1;下面的 Visual Basic 6.0 代码将标签的标题设置为“SomeText”:

Dim o As Object
Set o = Me.Label1
o.Caption = "SomeText"

在 Visual Basic 2008 中,标签控件的 Caption 属性替换为 Text 属性。升级代码后,Caption 属性的所有实例都更改为 Text,但由于后期绑定对象是无类型的,Visual Basic 无法检测对象是什么类型或是否应转换某些属性。此时,您需要在升级之后亲自更改代码。

如果使用早期绑定的对象重写代码,则会自动将其升级:

Dim o As Label
Set o = Me.Label1
o.Text = "SomeText"

尽可能将变量声明为合适的对象类型,而不是仅将其声明为 Object 数据类型。

如果在 Visual Basic 6.0 代码中确实使用了 Object 变量和 Variant 变量,建议在分配变量、对变量执行操作或将变量传递给函数时使用显式转换。例如,以下代码中“+”操作的作用不明:

Dim Var1 As Variant
Dim Var2 As Variant
Dim Var3 As Variant
Var1 = "3"
Var2 = 4
'BAD: Should Var1 and Var2 be added as strings or integers?
Var3 = Var1 + Var2

上面的示例在 Visual Basic 2008 中可能会引起运行时错误。重写最后一行以使用显式转换可确保代码正常工作:

'GOOD: explicit conversion
Var3 = CInt(Var1) + CInt(Var2)

Visual Basic 2008 支持基于参数类型重载函数。例如,Environ 函数现有两个窗体:

Environ( Expression As Integer) As String
Environ( Expression As String ) As String

Visual Basic 2008 根据参数类型确定调用哪个函数。如果向 Environ() 传递整数,则调用整数版本;如果传递字符串,则调用字符串版本。向重载函数传递 Variant 或 Object 数据类型的代码可能会造成编译器错误或运行时错误。如下面的示例所示,使用显式转换意味着代码在升级到 Visual Basic 2008 之后能够按预期方式工作:

Dim a As String
Dim v As Variant
v = "Path"
'GOOD: explicit conversion
a = Environ(CStr(v))

使用后期绑定对象的显式转换是很好的编码练习。它使代码的目的易于确定,并使项目能够更容易地升级到 Visual Basic 2008。

请参见

其他资源

有关升级的语言建议