首页 > 编程 > .NET > 正文

vb.Net编程简介之一(轉)

2024-07-10 13:02:41
字体:
来源:转载
供稿:网友
使用先前绑定
    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数据类型使用缺省属性。因为升级程序无法发现并解决这些错误。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表