|
导读使用先前绑定Visual Basic 6.0和Visual Basic.NET都支持对象的延迟绑定,该方法事先定义一个变量为Object数据类型,然后在运行时将其设定为一个类。然而,在升级过程中,当... 使用先前绑定Visual Basic 6.0和Visual Basic.NET都支持对象的延迟绑定, 该方法事先定义一个变量为Object数据类型,然后在运行时将其设定为一个类。然而,在升级过程中,当访问延迟绑定对象的缺省属性时可能会产生错误。例如假设工程中包含Form1,Form1中有一个Label对象,名称为Label1,下面的Visual Basic 6.0代码将Label的标题 设定为"SomeText" Dim o As Object Set o = Me.Label1 o.Caption = "SomeText" 在Visual Basic.NET的Windows窗体中,Label控件的Caption属 性被称为Text属性。当你的代码升级后,所有实例中的Caption属性都会转换为Text属性,但是延迟绑定对象是无类型(type-less)的,VB无法检测到对象的类型并做更改,在这种情况下,你需要手工对代码做改动。当你使用先前绑定对象时,对象可以自动升级,如下: Dim o As Label Set o = Me.Label1 o.Caption = "SomeText" 所以在程序中你需要将对象定义为适当的对象类型而不是简单的 定义为Object对象类型。 同Visual C++类似。Visual Basic.NET支持函数的重载,例如下 面的一个函数具有两个形态 Environ( Expression As Integer) As String Environ( Expression As String ) As String Visual Basic.NET会自动检测该使用那个参数的函数。如果你传 递一个正数值到Environ(),那么正数调用版本会被调用;如果传递一个字符串,String版本会被调用。如果传递Object或者Variant数据类型到一个重载函数将产生运行时错误。如果要想产生正确的结果就需要通过数据类型的强制转换,例如: Dim a As String Dim v As Variant v = "Path" a = Environ(CStr(v)) '正确 对于延迟绑定的对象使用强制类型转换是一个很好的编程习惯。 这就使得代码可读性更好,同时也可以非常轻松的移植到Visual Basic.NET使用Date存储日期/时间较早版本的VB支持使用Double数据类型来存储和改变时间。 在Visual Basic.NET中,这个特性将不再支持,因为在计算机内部日期并不是以Double方式存储的,例如下面的代码可以在Visual Basic 6.0中运行,但是在Visual Basic.NET中会产生错误。 Dim dbl As Double Dim dat As Date dat = Now dbl = dat'错误,不能将一个Date变量赋予一个Double变量 dbl = DateAdd("d", 1, dbl) '错误,Double变量不能用于日期函 数 dat = CDate(dbl) '错误 CDate函数不能将Double变量转换到Date .NET架构提供了ToOADate与FromOADate函数用于在double变量以 及Date变量之间转换。然而这需要在升级后手工修改,所以在存储日期时应该使用Date数据类型。 缺省属性 在Visual Basic 6.0中,许多对象都有缺省属性,缺省属性在代 码中可以省略。例如: MsgBox Form1.Text1.Text 可以这样编写: MsgBox Form1.Text1 缺省属性在代码编译是决定。同样,你也可以在延迟绑定的对象中使 用缺省属性,例如: Dim obj As Object Set obj = Form1.Text1 MsgBox obj 对于延迟绑定的对象,缺省属性在程序运行时决定。 Visual Basic.NET不支持缺省属性,当你的工程升级后, Visual Basic.NET会自动决定缺省属性,但是对于延迟绑定的对象无法自动解决决定缺省属性的问题。在这种情况下,你需要自己来修改代码。更加复杂的是,很多库是通过 _Default属性来实现缺省属性的。_Default象是一个代理,它将调用传递给真正的缺省属性。所以当你的工程升级后,一些属性会被更改为 _Default。代码还是象往常那样工作,只是代码不如原来的实际属性易读。 Dim obj As Object Set obj = Me.Text1 MsgBox obj '不好的代码,使用缺省属性 MsgBox Me.Text1 '不好的代码,使用缺省属性 use: Dim obj As Object Set obj = Me.Text1 MsgBox obj.Text '好的代码,写出了属性 MsgBox Me.Text1.Text '好的代码,写出了属性 虽然缺省属性不被Visual Basic.NET支持,但是带参数的缺省属 性是被支持的,要了解它们之间的区别,下面是范例: Dim rs As ADODB.Recordset rs("CompanyName") = "SomeCompany" rs!CompanyName = "SomeCompany" 实际上等于: Dim rs As ADODB.Recordset rs.Fields("CompanyName").Value = "SomeCompany" rs.Fields!CompanyName.Value = "SomeCompany" 因为Value是Fields的缺省属性对于第二种写法,Visual Basic.NET是支持的;然而第一种情况不被支持,那么正确的用法如下: Dim rs As ADODB.Recordset rs("CompanyName").Value = "SomeCompany" rs!CompanyName.Value = "SomeCompany" 象上面的范例和其它的大多数情况可以在工程升级时解决,但是 你还是要避免在Visual Basic 6.0中在Object和Variant数据类型使用缺省属性。因为升级程序无法发现并解决 |
温馨提示:喜欢本站的话,请收藏一下本站!