知识大全 从Visual Basic 6.0到Visual Basic.NET
Posted 变量
篇首语:只要自己上进,不怕人家看轻。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 从Visual Basic 6.0到Visual Basic.NET相关的知识,希望对你有一定的参考价值。
从Visual Basic 6.0到Visual Basic.NET 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
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 到 Visual Basic NET 的一些变更 并解释了进行这些变更的原因 本文还介绍 Visual Basic NET 升级向导的功能 它是作为产品的一部分提供的工具 可以帮助您将现有的应用程序升级为 Visual Basic NET 版本
有关从 Visual Basic 升级到 Visual Basic NET 的其他信息 请参阅白皮书《准备将 Visual Basic 应用程序升级到 Visual Basic NET》(英文) 此白皮书介绍了升级过程并提供了尽可能顺利升级的建设性意见
语言
Variant
Visual Basic
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
Long 变量存储为带有符号的 位数字 而 Integer 变量存储为 位数字
Visual Basic NET
Long 变量存储为带有符号的 位数字 Integer 变量存储为 位数字 而 Short 变量存储为 位数字 在 位系统中 位整数操作比 位和 位整数操作都要快 这意味着 Integer 将是最有效和最基本的数字类型
由于部分 NET 框架技术以现代的 位和 位技术为基础 因此根据新技术更新数据大小是明智之举
升级向导
修改变量的类型 因此以下代码
Dim x As IntegerDim y As Long
升级后将变为
Dim x As ShortDim y As Integer
Currency
Visual Basic
Visual Basic 支持 Currency 数据类型 您不能将变量声明为 Decimal 类型(虽然变量可以具有子类型 Decimal)
Currency 变量以整数格式存储为 位数字 以 为标度 以将数字表示为定点数 其小数点左边为 位 右边为 位 这种表示形式可以表示 至 范围内的数字
Decimal 变量存储为带有符号的 位整数 标度为 的不同乘幂 次幂的刻度因子指定了小数点右边的数字位数 其范围为 至 当指数为 时(无小数位数) 最大的可能值为 +/ 当指数为 时 最大值为 +/ 最小的非零值为 +/
Visual Basic NET
Currency 数据类型的精度不够 无法避免四舍五入的误差 因此创建了 Decimal 这种数据类型
升级向导
将 Currency 数据类型转换为 Decimal 因此以下代码
Dim x As Currency
升级后将变为
Dim x As Decimal
Date
Visual Basic
Date 变量在内部以 Double 格式存储 能够作为 Double 类型的变量操作
Date 变量存储为 IEEE 位浮点数 表示从 年 月 日到
当其他数字类型转换为 Date 时 小数点左边的值表示日期信息 而小数点右边的值表示时间信息 午夜为 正午为 整个数值为负表示 年 月 日之前的日期
Visual Basic NET
Date 在内部存储为 位整数 因此无法直接作为 Double 进行操作 NET 框架提供了 ToOADate 和 FromOADate 函数以进行 Double 和 Date 之间的转换 将日期表示为整数形式可以简化并加速对日期的操作
升级向导
升级工具并非能够检测到所有使用变量将 Date 存储为 Double 的情况 但它一般会在将 Double 指定为 Date 的位置插入适当的 ToOADate 或 FromOADate 方法 例如 以下代码
Dim dbl As Double Dim dat As Date Dbl = dat
升级后将变为
Dim dbl As Double Dim dat As Date Dbl = dat ToOADate
定长字符串
Visual Basic
除类模块的 Public 变量之外 其他变量均可以声明为定长字符串
Visual Basic NET
CLR 第一版不支持定长字符串 在后续版本中将添加这一支持功能
升级向导
在大多数情况下不会出现问题 假设为定长字符串表现方式 则以下代码
Dim MyFixedLengthString As String *
升级后将变为
Dim MyFixedLengthString As New VB FixedLengthString( )
有关该主题的全面说明 请参阅白皮书《准备将 Visual Basic 应用程序升级到 Visual Basic NET》(英文)
Type
Visual Basic
Type 语句用于定义由用户定义的数据类型
Visual Basic NET
Type 和 User Defined Type 这两个名称会引起混淆 因为类 枚举和接口也是可以由用户定义的类型 Type 和 User 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
用户定义的数据类型可以包含某种数据类型 数组或先前定义的用户定义类型的一个或多个元素 在 Visual Basic 中 它们存储在连续的内存块中
Visual Basic NET
格式是最有效的 它可能位于一段连续的内存 也可能不 结构可以被标记为封送处理属性 以确保能够作为连续内存块传递到 组件
升级向导
在所有需要添加封送处理属性的位置 API 均标记有 TODO 注释 (属性不是自动添加的 只有将结构传递到 API 时才需要它们 )
True
Visual Basic
True 的值为
Visual Basic NET
True 的值为
鉴于语言的协同操作 需要一种适用于所有语言的一致表示法
升级向导
如果将布尔值强制转换为非布尔值 代码将标记有升级警告 例如 以下代码
Dim MyBoolean As BooleanDim MyInteger As Integer MyInteger = MyBoolean
升级后将变为
Dim MyBoolean As BooleanDim MyInteger As Short UPGRADE_WARNING: Boolean MyBoolean is being converted into a numeric MyInteger = MyBoolean
Empty
Visual Basic
变量均初始化为 Empty 当用于数值表达式时 变量将自动转换为零 当用于字符串表达式时 则自动转换为空字符串
Visual Basic NET
对象变量均初始化为 Nothing 当用于数值表达式时 变量将自动转换为零 当用于字符串表达式时 将自动转换为空字符串 使用 Nothing 代替特殊的 Empty 值可以降低语言的复杂性 语言协同操作性也更强
升级向导
Null 和 Null 传播
Visual Basic
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
DefBool DefByte DefInt DefLng DefCur DefSng DefDbl DefDec DefDate DefStr DefObj 和 DefVar 语句用于在模块级设置变量 参数和过程返回类型(以指定字符开始)的默认数据类型
Visual Basic NET
避免使用隐式类型声明 提高了代码的可读性和可靠性
升级向导
将变量类型的显式声明插入代码 例如 以下代码
DefStr a z
Sub MySub
s = Hello
End Sub
升级后将变为
Sub MySub
Dim s As String
s = Hello
End Sub
块内的局部变量
Visual Basic
从包含声明的行至过程结束的范围内 局部变量均可见
Visual Basic NET
Visual Basic NET 支持变量的块范围 这意味着从包含声明的行开始 至出现声明的块结束 局部变量均可见 例如
Sub Test(x As Integer)
If x < Then
Dim y As Integer = x
Else
End If
End Sub
以上示例中的变量 y 仅在声明该变量的块中可用 更确切地说 它仅在其声明至 Else 语句之间可用 如果需要在整个过程中使用变量 则必须在 If/Else/End If 控制结构之外声明该变量
变量的块范围是许多结构语言共有的功能 过程局部变量允许定义过程内部变量 从而对结构化编程提供支持 与此类似 块级别变量允许定义代码块内部变量 从而对结构化分解提供支持
升级向导
如果变量在块内声明 变量将自动移至模块级范围 例如 以下代码
If x = Then
Dim y As Integer
End If
升级后将变为
Dim y As Integer
If x = Then
End If
新的自动重新实例化
Visual Basic
窗体的类变量声明 Dim x As New <classname> 将导致编译器每次引用 x 时生成代码 此代码检查 x 是否为 Nothing 如果是 Nothing 则创建类的新实例 例如 以下代码
Dim x As New MyClass
Call x MyMethod()
等同于
Dim x As MyClass
If x Is Nothing Then
Set x = New MyClass
End If
Call x MyMethod()
即使变量已经设置为 Nothing 在下一次调用时该变量仍将重新实例化
Visual Basic NET
窗体的变量声明 Dim x As New <classname> 等同于 Dim x As <classname> = New <classname> 引用通过此语法声明的变量不会生成特殊代码
Visual Basic NET 声明 As New 比 Visual Basic 中的同一声明更加有效 大多数对这类变量的引用不需要额外的开销 而且 Visual Basic 的 自动实例化 行为对于发现它的许多编程人员来说非常古怪
升级向导
这极少会成为问题 但是 如果代码尝试使用已设置为 Nothing 的类 将导致运行时异常 该异常很容易检测到 然后 可以方便地修改代码以实例化类的新版本 如下例所示
Dim x As New MyClass
x = Nothing
x = New MyClass
对象终结
Visual Basic
引用计数机制用于垃圾回收对象实例 如果对象不在循环中 当对象不再使用 引用计数会立即检测到此情况 并且运行终结代码
Visual Basic NET
跟踪垃圾回收器从存储在堆栈变量 模块变量和共享变量中的可及引用开始 将对象过一遍 此跟踪进程作为后台任务运行 因此在指向对象的最后一个引用结束和添加新引用之间有一个不定的时间段
在某些情况下 客户端确实需要能够强制某一对象释放资源 CLR 规定这样的对象应当实现 IDisposable 接口 这就提供了 Dispose 方法 当客户端结束对具有 Dispose 方法的对象的使用时 它可以显式调用 Dispose 方法以释放其资源 例如 包装数据库连接的对象应当公开 Dispose 方法
跟踪垃圾回收器能够正确释放引用循环中的对象 此外 跟踪垃圾回收器的性能比引用计数要好得多
升级向导
在大多数情况下 这一改变不会导致问题 如果您的代码中使用了资源句柄开放(连接或文件句柄) 则必须显式关闭此句柄 此问题易于检测并会导致运行时错误
数组
Visual Basic
数组可以由任何整数数字的上下限限定 如果在声明中未指定下限 将使用 Option Base 语句确定默认下限
Visual Basic NET
为了与其他语言协同操作 所有数组的下限均必须为零 这样就不再需要 Option Base 语句
升级向导
ReDim
Visual Basic
Visual Basic 中的固定大小数组和不定大小数组有所区别 固定大小数组通过 Dim 语句声明 在此语句包括此声明中的数组界限 动态数组在 Dim 语句中声明 不指定界限信息 在使用动态数组之前 需要通过 ReDim 语句重新标注动态数组 在 Visual Basic 中 ReDim 语句提供了在单个语句中为动态数组声明和分配空间的快捷方法 ReDim 语句是 Visual Basic 中唯一能够同时声明和初始化变量的语句
Visual Basic NET
ReDim 语句仅用于为数组分配或重新分配空间 而不能用于重新分配数组 这是因为 Visual Basic NET 中的所有数组均是动态的 在 Visual Basic NET 中 Dim 语句既可用于声明动态数组 又可用于初始化动态数组 由于所有变量声明均可声明变量并指定变量的初始值 使用 ReDim 同时声明和初始化变量就变得多余和不必要了 只需要 Dim 语句声明变量使语言更加简单 一致性更高
升级向导
如果 ReDim() 用于声明数组 在代码中会自动插入相应的声明 但是 最好的方法是您自己先在数组中插入 Dim 语句 因为使用 ReDim 声明数组需要升级工具来推断正确的声明 使用 ReDim 也产生了不便处理的代码 因为数组在两处进行了同一声明
赋值
Visual Basic
赋值形式有两种 Let 赋值(默认)和 Set 赋值 用 Set 语句为 cn 赋值
Visual Basic NET
仅有一种赋值形式 x = y 意味着将变量或属性 y 的值赋给变量或属性 x 对象类型变量的值是对对象实例的引用 因此如果 x 和 y 是引用类型的变量 将执行引用赋值 这种单一形式的赋值减少了语言的复杂性 并使代码可读性更强
升级向导
删除 Set 和 Let 语句 解析强类型对象的默认属性 并将属性显式添加到代码中
有关该主题的全面说明 请参阅白皮书《准备将 Visual Basic 应用程序升级到 Visual Basic NET》(英文)
And Or Xor 和 Not
Visual Basic
And Or Xor 和 Not 运算符可以执行逻辑运算或位运算(取决于表达式)
Visual Basic NET
And Or 和 Xor 仅适用于布尔型 对于 And 和 Or 运算符 如果第一个运算数的值足以确定运算符的结果 则运算符将简化计算 新的运算符 BitOr BitAnd 和 BitXor 均用于位逻辑运算 Bitxxx 运算符不具有简化作用
升级向导
如果 And/Or 语句是非布尔型或者包含函数 方法或属性 此语句将升级为使用兼容性函数 与 Visual Basic 中的表现形式相同 如果 And/Or 语句是布尔型 此语句将升级为使用本地 Visual Basic Net 语句
有关该主题的全面说明 请参阅白皮书《准备将 Visual Basic 应用程序升级到 Visual Basic NET》(英文)
相关参考
知识大全 Visual C#或Visual Basic创建Web应用程序(下)
VisualC#或VisualBasic创建Web应用程序(下) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起
VisualBasic的座标系统 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 这里我们来看一下
VisualBasic.Net基本语句 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一Try…
VisualBasic.Net实现TCP协议 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!TCP协
实战VisualBasic.Net对话框 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 对话框和
知识大全 使用Visual Basic.NET重载事件处理程序
使用VisualBasic.NET重载事件处理程序 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
VisualBasic.NET中组件的叠加使用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 状
VisualBasic.Net打造个性化菜单 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 菜单
VisualBasic和C#中的LINQ聚合 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Ag
如何在VisualBasic中使用导入API 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在V