将Visual Basic 6.0程序转换到Visual Basic.NET

从 Visual Basic 6.0 到 Visual Basic.NET 的转换


Microsoft Visual Basic.NET 是 Microsoft Visual Basic© 的后续版本,它是基于 .NET 框架重新设计的,您可以用它来轻松地创建用于 Microsoft Windows© 操作系统和 Web 的下一代应用程序。使用 Visual Basic.NET,可视化开发 Web 应用程序、Web 服务、Windows 应用程序和服务器端组件将变得轻而易举。此外,Visual Basic.NET 使用了 Windows 应用程序的 XCOPY 部署方案,使您不必再担心 DLL 版本问题。随着 Visual Basic.NET 的发布,“DLL 噩梦”将成为过去。

在设计 Visual Basic.NET 时,我们着眼于世界各地 Visual Basic 开发者的要求。Visual Basic 语言现在是真正的面向对象语言,并支持实现继承。窗体设计器支持可视化继承,并包含窗体自动调整大小、资源本地化和访问选项支持等新特性。现在的数据工具继续支持 XML 数据,并可以共同使用设计时数据绑定和断开数据。此外,Visual Basic.NET 是基于 .NET 框架直接创建的,因此可以使用所有的平台特性,并能够与其他 .NET 语言协同工作。

在发布这些功能的同时,我们对产品的几个方面作了修改。本文档介绍了从 Visual Basic 6.0 到 Visual Basic.NET 的一些变更,并解释了进行这些变更的原因。本文还介绍 Visual Basic.NET 升级向导的功能。它是作为产品的一部分提供的工具,可以帮助您将现有的应用程序升级为 Visual Basic.NET 版本。

有关从 Visual Basic 6.0 升级到 Visual Basic.NET 的其他信息,请参阅白皮书《准备将 Visual Basic 6.0 应用程序升级到 Visual Basic.NET》(英文)。此白皮书介绍了升级过程并提供了尽可能顺利升级的建设性意见。

语言

Variant

Visual
Basic 6.0

Variant 是一种特殊的“通用”数据类型,可以包含除定长字符串之外的各类数据。Object 变量用作指向对象的指针。默认的数据类型为 Variant


Visual Basic.NET


公共语言运行时 (CLR) 使用 Object 作为通用数据类型。Visual Basic.NET 没有继续使用 Variant 作为通用数据类型,而是选择采用 CLR 命名规则,以避免在跨语言开发时造成混乱。仅使用一种通用数据类型将简化类型系统。默认的数据类型为 Object


升级
向导


Variant 数据类型变为 Object,因此以下代码:

Dim x As Variant

升级后将变为:

Dim x As Object

Integer 和 Long

Visual
Basic 6.0

Long 变量存储为带有符号的 32 位数字,而 Integer 变量存储为 16 位数字。


Visual Basic.NET


Long 变量存储为带有符号的 64 位数字,Integer 变量存储为 32 位数字,而 Short 变量存储为 16 位数字。在 32 位系统中,32 位整数操作比 16 位和 64 位整数操作都要快。这意味着 Integer 将是最有效和最基本的数字类型。

由于部分 .NET 框架技术以现代的 32 位和 64 位技术为基础,因此根据新技术更新数据大小是明智之举。


升级
向导


修改变量的类型,因此以下代码:

Dim x As Integer
Dim y As Long

升级后将变为:

Dim x As Short
Dim y As Integer

Currency

Visual
Basic 6.0

Visual Basic 6.0 支持 Currency 数据类型。您不能将变量声明为 Decimal 类型(虽然变量可以具有子类型 Decimal)。

Currency 变量以整数格式存储为 64 位数字,以 10,000 为标度,以将数字表示为定点数,其小数点左边为 15 位,右边为 4 位。这种表示形式可以表示 -922,337,203,685,477.5808 至 922,337,203,685,477.5807 范围内的数字。

Decimal 变量存储为带有符号的 96 位整数,标度为 10 的不同乘幂。10 次幂的刻度因子指定了小数点右边的数字位数,其范围为 0 至 28。当指数为 0 时(无小数位数),最大的可能值为 +/-79,228,162,514,264,337,593,543,950,335。当指数为 28 时,最大值为 +/-7.9228162514264337593543950335,最小的非零值为 +/-0.0000000000000000000000000001。


Visual Basic.NET


Currency 数据类型的精度不够,无法避免四舍五入的误差,因此创建了 Decimal 这种数据类型。


升级
向导


Currency 数据类型转换为 Decimal,因此以下代码:

Dim x As Currency

升级后将变为:

Dim x As Decimal

Date

Visual
Basic 6.0

Date 变量在内部以 Double 格式存储,能够作为 Double 类型的变量操作。

Date 变量存储为 IEEE 64 位浮点数,表示从 100 年 1 月 1 日到 9999 年 12 月 31 日的日期和从 0:00:00 到 23:59:59 的时间。任何可识别的文字日期都可以指定为 Date 变量。

当其他数字类型转换为 Date 时,小数点左边的值表示日期信息,而小数点右边的值表示时间信息。午夜为 0,正午为 0.5。整个数值为负表示 1899 年 12 月 30 日之前的日期。


Visual Basic.NET


Date 在内部存储为 64 位整数,因此无法直接作为 Double 进行操作。.NET 框架提供了 ToOADateFromOADate 函数以进行 DoubleDate 之间的转换。将日期表示为整数形式可以简化并加速对日期的操作。

升级
向导


升级工具并非能够检测到所有使用变量将 Date 存储为 Double 的情况,但它一般会在将 Double 指定为 Date 的位置插入适当的 ToOADateFromOADate 方法。例如,以下代码:

Dim dbl As Double  
Dim dat As Date
Dbl = dat

升级后将变为:

Dim dbl As Double  
Dim dat As Date
Dbl = dat.ToOADate

定长字符串

Visual
Basic 6.0

除类模块的 Public 变量之外,其他变量均可以声明为定长字符串。


Visual Basic.NET


CLR 第一版不支持定长字符串。在后续版本中将添加这一支持功能。


升级
向导


在大多数情况下不会出现问题。假设为定长字符串表现方式,则以下代码:

Dim MyFixedLengthString As String * 100

升级后将变为:

Dim MyFixedLengthString As New VB6.FixedLengthString(100)

有关该主题的全面说明,请参阅白皮书《准备将 Visual Basic 6.0 应用程序升级到 Visual Basic.NET》(英文)。

Type

Visual
Basic 6.0

Type 语句用于定义由用户定义的数据类型。


Visual Basic.NET


TypeUser-Defined Type 这两个名称会引起混淆,因为类、枚举和接口也是可以由用户定义的类型。TypeUser-Defined Type 是从 QuickBasic 遗留下来的,在 QuickBasic 中用户可以定义的类型只有结构和记录。CLR 使用 Type 这一名称广义地包含所有数据类型。

因此,在 Visual Basic.NET 中 Type 语句将变为 Structure


升级
向导


Type 语句变为 Structure,因此以下代码:

Type MyType  
MyVariable As Integer
End Type

升级后将变为:

Structure MyType  
Dim MyVariable As Short
End Structure

用户定义类型存储

Visual
Basic 6.0

用户定义的数据类型可以包含某种数据类型、数组或先前定义的用户定义类型的一个或多个元素。在 Visual Basic 6.0 中,它们存储在连续的内存块中。


Visual Basic.NET


格式是最有效的。它可能位于一段连续的内存,也可能不。结构可以被标记为封送处理属性,以确保能够作为连续内存块传递到 COM 组件。


升级
向导


在所有需要添加封送处理属性的位置,API 均标记有 TODO 注释。(属性不是自动添加的,只有将结构传递到 API 时才需要它们。)

True

Visual
Basic 6.0

True 的值为 -1。


Visual Basic.NET


True 的值为 1。

鉴于语言的协同操作,需要一种适用于所有语言的一致表示法。


升级
向导


如果将布尔值强制转换为非布尔值,代码将标记有升级警告。例如,以下代码:

Dim MyBoolean As Boolean
Dim MyInteger As Integer
MyInteger = MyBoolean

升级后将变为:

Dim MyBoolean As Boolean
Dim MyInteger As Short
' UPGRADE_WARNING: Boolean MyBoolean is being converted into a numeric
MyInteger = MyBoolean

Empty

Visual
Basic 6.0

变量均初始化为 Empty,当用于数值表达式时,变量将自动转换为零,当用于字符串表达式时,则自动转换为空字符串。


Visual Basic.NET


对象变量均初始化为 Nothing,当用于数值表达式时,变量将自动转换为零,当用于字符串表达式时,将自动转换为空字符串。使用 Nothing 代替特殊的 Empty 值可以降低语言的复杂性,语言协同操作性也更强。


升级向导


 

Null 和 Null 传播

Visual
Basic 6.0

Null 值为 Variant 的子类型,表示变量不包含有效数据。Null 值通过表达式和函数“传播”。如果表达式的任一部分为 Null,则整个表达式为 Null。将 Null 作为参数传递给大多数函数时,这些函数也将返回 Null


Visual Basic.NET


不支持 Null 传播。使用 ADO.NET 对数据进行编程的模型用于在检索字段的值之前先检查字段的值是否为 Null。包含 null 的变量将作为 DBNull 类型的对象封送处理至 CLR。

Visual Basic.NET 处理 Null 时更加直接:字符串函数(例如 Left())总是返回字符串,与您的预期一样。


升级
向导


Null 值和 IsNull 函数标记有升级警告注释。例如,以下代码:

If x Is Null Then MsgBox "Null"

升级后将变为:

' UPGRADE_WARNING: Use of IsNull() detected  
If IsDBNull(x) Then MsgBox "Null"

Def<Type>

Visual
Basic 6.
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值