-
vb.Net编程简介之一
内容:
使用先前绑定
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数据类型使用缺省属性。因为升级程序无法发现并解决这
些错误。
使用先前绑定
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数据类型使用缺省属性。因为升级程序无法发现并解决这
些错误。
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式