除了上面谈到的语言进化,还有一些语法上的变化。所有这些语言和语法的变化在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进行了考察。
联系客服