雅尼卫城音乐会 斗琴:VB6.0与VB.NET的不同之处(转)

来源:百度文库 编辑:偶看新闻 时间:2024/04/29 17:25:37

除了上面谈到的语言进化,还有一些语法上的变化。所有这些语言和语法的变化在MSDN中均可查到,本文只作简单介绍。

数据类型(Data Type)的改变

VB.NET中有些数据类型得到改进。下面是变化对照表。

 

数据类型

 

VB6.0

 

VB.NET

 

Integer

 

16 bit size

 

32 bit size

 

Long

 

32 bit size

 

64 bit size

 

Currency

 

用于存储大浮点数

 

被decimal替代,支持更高精度

 

Variant

 

可以存储任意类型数据

 

被Object类型替代,也可以存储任意类型数据,但结果更好

 

Date

 

Date类型被存储为double

 

引入DateTime类型,用于存储不同格式的日期

在VB.NET中,Short数据类型是16 bit的。Short,Integer和Long都等同于CLR的System.Int16、System.Int32和System.Int64类型。

变量声明的变化

在VB6.0中,变量声明有许多限制。其中之一就是不能同行声明多个变量。如果一定要在一行中声明多个变量,就一定得指明每个变量的类型,否则将被默认为Variant类型。

Dim a1, a2 As Integer

Dim a3 As Integer, a4 As Integer

第一行中的a1是Variant类型,a2是Integer类型。第二行中两个变量都是Integer类型。

VB.NET支持同行声明多个变量,举例如下:

Dim a1, a2, a3 As Integer

变量初始化是另一个问题。在VB6.0中不能同时声明和初始化变量,而VB.NET则支持这个特性。

Dim name As String = "Mahesh"

System.Console.Write(name)

声明常量也可以照此办理:

Const DT_COUNT As Integer = 23

New关键字。在VB.NET中,New关键字用于创建对象。由于数据类型是对象,所以New关键字用以创建一个数据类型对象。

Dim i As Integer = New Integer()

i = 10

System.Console.WriteLine(i.ToString())

代码块级别支持。像C++一样,VB.NET支持代码块级别的作用域检查。在语句块中声明的变量只在块内有效。

For i = 1 To 10

Dim p As Long

System.Console.WriteLine(i.ToString())

Next

System.Console.WriteLine(p.ToString())

这段代码在VB.NET中会得到一个编译错误,因为p在For..Next语句块之外不可访问。在VB6.0中这段代码可以通过。

 

改进了的类型安全

在VB6.0中,当你声明一个对外部过程的引用时,可以指定任意类型的参数为As Any。Any关键字禁止了类型检查,允许任意数据类型传入和返回。

VB.NET不支持Any关键字。你必须指定每个参数和返回值的数据类型。

 

数组

VB.NET对数组作了明显的改动。

数组范围。在VB.NET中,你需要格外留意数组范围问题。VB6.0默认数组下界为0,故数组中的元素数量等与数组上界值加一。下面的数组界限从A(0)到A(10),共有11个元素:

Dim A(10) As Single

可以使用Option Base改变下界值为1。在VB.NET中,数组和C++一样,下界值为0,不支持Option Base。

注意:MSDN文档指出数组只能包括与其尺寸相等的元素数量,例如:

Dim A(10) As Integer

只能包括10个元素(从A(0)到A(9)),但在编译下面这段代码时我发现它运行良好,看起来数组中容纳了11个元素。

Dim A(10) As Integer

A(0) = 12

A(2) = 24

A(10) = 23

System.Console.WriteLine(A(0).ToString())

System.Console.WriteLine(A(10).ToString())

System.Console.WriteLine(UBound(A).ToString())

System.Console.WriteLine(LBound(A).ToString())

Lbound和Ubound分别返回 0与10。

ReDim和Fixed Array。你可以在VB6.0中指定固定长度的数组。

Dim ArrWeekDays(0 To 6) As Integer

这里的ArrWeekDays数组是固定长度的,不能用ReDim语句改变长度。VB.NET不支持固定长度数组,所以ReDim总是有效。

可以用下面两种方式声明数组:

Dim ArrWeekDays(6) As Integer

Dim ArrWeekDays() As Integer = {1, 2, 3, 4, 5, 6}

ReDim语句。在VB6.0中,ReDim用于初始化动态数组。在VB.NET中你不能把它当作声明用。ReDim只能用于改变数组长度,不过不能改变数组维度。

Variant对阵Object

VB6.0中的Variant数据类型能存储任意类型变量,VB.NET中Object具备相同能力。

算术操作符

VB.NET支持类似C++的快捷方式。下面的表格显示了常规操作与快捷操作的不同之处。快捷方式也可用于*、/、|、&等操作符。

操作符 常规语法 快捷方式

加法 A = A+5 A +=5

减法 A = A – 5 A -+ 5

固定长度字符串

在VB6.0中,可以在声明字符串时指定其长度。VB.NET不支持固定长度字符串。

布尔操作符

VB6.0中的And、Or或是Xor语句是按位操作符。而在VB.NET中,它们是布尔操作符。执行这些操作将返回true或false。VB.NET引入新操作符来完成按位操作。

操作符 描述

BitAnd 按位And

BitOr 按位Or

BitXor 按位Xor

BitNot 按位Not

结构与自定义类型

在VB6.0中,你使用Type…End Type语句块创建结构或自定义类型。例如:

Type StdRec

StdId As Integer

StdName As String

End Type

VB.NET引入新的语法:Structure。Type…EndType不再被支持。Structure…EndStructure与C++用法相同。可以指定结构中每个元素的可访问域,如Public、Protected、Friend、ProtectedFriend、Private等。例如:

Structure StdRec

Public StdId As Integer

Public StdName As String

Private StdInternal As String

End Structure

VB.NET中的Structures就像类一样,也可以拥有方法和属性。

New和Nothing关键字

VB6.0中,AS New和Nothing关键字用于声明一个对象并初始化它。

VB.NET不支持隐式创建对象。如前所言,甚至连数据类型都是对象。你可以采用以下两种方法创建数据类型或对象:

Dim i As Integer

Dim i As Integer = New Integer()

// Do something

if i = Nothing Then

End If

不支持Set语句

VB6.0使用Set语句指派对象。例如:

Set myObj = new MyObject

Set a = b

在VB.NET中,不需要使用Set指派对象。例如:

myObj = new MyObj()

a = b

过程(procedure)语法的变化

在VB.NET中过程语法有了很多变化。例如类似C++的过程调用方式、ByVal(传值)为默认类型、Optional关键字、return语句等等。

类似C++的过程调用方式

VB6.0允许不用加圆括号调用过程(sub)。不过,用Call语句调用函数或sub时,一定要使用圆括号。例如:

Dim I as Integer

Call EvaluateData(2, i)

EvaluateData 2, i

在VB.NET中,所有的方法调用都需要圆括号,而Call语句则是可选的。

ByVal是默认参数类型

在VB6.0中,在调用函数或sub时ByRef(传址)是默认类型。那意味着所有改变将反映到传入的变量。VB.NET改变了这种方式。现在,默认的参数类型是ByVal(传值)。

Optional关键字

VB6.0使用Optional关键字可用来让用户决定传入一个默认值,之后在调用IsMissing函数判断参数是否有效。

而在VB.NET中,每个可选参数必须声明其默认值,无需调用IsMissing函数。例如:

Sub MyMethod(Optional ByVal i As Integer = 3) Return语句

VB.NET的Return语句与C++相似。使用Return语句把控制权从过程返还给调用者。在VB6.0中,Return语句与GoSub语句一起使用。VB.NET不再支持GoSub语句。

流程控制的改变

下面是VB.NET对流程控制语句的修改:

1. GoSub不再受到支持。

2. Call、Function和Sub语句均可用于调用过程。

3. On ... GoSub和On ... GoTo语句不再受支持。可以使用Select Case语句来替代。

4. While ... Wend语句现在改为While…End While语句。不再支持Wend关键字。

小结

Visual Basic .NET是.NET版本的Visual Basic。通过本文你了解到VB.NET的基本概念,而且也从VB6.0开发者的角度对VB.NET进行了考察。