除了上面談到的語言進化,還有一些語法上的變化。所有這些語言和語法的變化在MSDN中均可查到,本文只作簡單介紹。
數(shù)據(jù)類型(Data Type)的改變
VB.NET中有些數(shù)據(jù)類型得到改進。下面是變化對照表。
數(shù)據(jù)類型 |
VB6.0 |
VB.NET |
Integer |
16 bit size |
32 bit size |
Long |
32 bit size |
64 bit size |
Currency |
用于存儲大浮點數(shù) |
被decimal替代,支持更高精度 |
Variant |
可以存儲任意類型數(shù)據(jù) |
被Object類型替代,也可以存儲任意類型數(shù)據(jù),但結(jié)果更好 |
Date |
Date類型被存儲為double |
引入DateTime類型,用于存儲不同格式的日期 |
在VB.NET中,Short數(shù)據(jù)類型是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關(guān)鍵字。在VB.NET中,New關(guān)鍵字用于創(chuàng)建對象。由于數(shù)據(jù)類型是對象,所以New關(guān)鍵字用以創(chuàng)建一個數(shù)據(jù)類型對象。
Dim i As Integer = New Integer()
i = 10
System.Console.WriteLine(i.ToString())
代碼塊級別支持。像C++一樣,VB.NET支持代碼塊級別的作用域檢查。在語句塊中聲明的變量只在塊內(nèi)有效。
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中,當你聲明一個對外部過程的引用時,可以指定任意類型的參數(shù)為As Any。Any關(guān)鍵字禁止了類型檢查,允許任意數(shù)據(jù)類型傳入和返回。
VB.NET不支持Any關(guān)鍵字。你必須指定每個參數(shù)和返回值的數(shù)據(jù)類型。
數(shù)組
VB.NET對數(shù)組作了明顯的改動。
數(shù)組范圍。在VB.NET中,你需要格外留意數(shù)組范圍問題。VB6.0默認數(shù)組下界為0,故數(shù)組中的元素數(shù)量等與數(shù)組上界值加一。下面的數(shù)組界限從A(0)到A(10),共有11個元素:
Dim A(10) As Single
可以使用Option Base改變下界值為1。在VB.NET中,數(shù)組和C++一樣,下界值為0,不支持Option Base。
注意:MSDN文檔指出數(shù)組只能包括與其尺寸相等的元素數(shù)量,例如:
Dim A(10) As Integer
只能包括10個元素(從A(0)到A(9)),但在編譯下面這段代碼時我發(fā)現(xiàn)它運行良好,看起來數(shù)組中容納了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中指定固定長度的數(shù)組。
Dim ArrWeekDays(0 To 6) As Integer
這里的ArrWeekDays數(shù)組是固定長度的,不能用ReDim語句改變長度。VB.NET不支持固定長度數(shù)組,所以ReDim總是有效。
可以用下面兩種方式聲明數(shù)組:
Dim ArrWeekDays(6) As Integer
Dim ArrWeekDays() As Integer = {1, 2, 3, 4, 5, 6}
ReDim語句。在VB6.0中,ReDim用于初始化動態(tài)數(shù)組。在VB.NET中你不能把它當作聲明用。ReDim只能用于改變數(shù)組長度,不過不能改變數(shù)組維度。
Variant對陣Object
VB6.0中的Variant數(shù)據(jù)類型能存儲任意類型變量,VB.NET中Object具備相同能力。
算術(shù)操作符
VB.NET支持類似C++的快捷方式。下面的表格顯示了常規(guī)操作與快捷操作的不同之處??旖莘绞揭部捎糜?、/、|、&等操作符。
操作符 常規(guī)語法 快捷方式
加法 A = A+5 A +=5
減法 A = A – 5 A -+ 5
固定長度字符串
在VB6.0中,可以在聲明字符串時指定其長度。VB.NET不支持固定長度字符串。
布爾操作符
VB6.0中的And、Or或是Xor語句是按位操作符。而在VB.NET中,它們是布爾操作符。執(zhí)行這些操作將返回true或false。VB.NET引入新操作符來完成按位操作。
操作符 描述
BitAnd 按位And
BitOr 按位Or
BitXor 按位Xor
BitNot 按位Not
結(jié)構(gòu)與自定義類型
在VB6.0中,你使用Type…End Type語句塊創(chuàng)建結(jié)構(gòu)或自定義類型。例如:
Type StdRec
StdId As Integer
StdName As String
End Type
VB.NET引入新的語法:Structure。Type…EndType不再被支持。Structure…EndStructure與C++用法相同??梢灾付ńY(jié)構(gòu)中每個元素的可訪問域,如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關(guān)鍵字
VB6.0中,AS New和Nothing關(guān)鍵字用于聲明一個對象并初始化它。
VB.NET不支持隱式創(chuàng)建對象。如前所言,甚至連數(shù)據(jù)類型都是對象。你可以采用以下兩種方法創(chuàng)建數(shù)據(jù)類型或?qū)ο螅?/p>
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++的過程調(diào)用方式、ByVal(傳值)為默認類型、Optional關(guān)鍵字、return語句等等。
類似C++的過程調(diào)用方式
VB6.0允許不用加圓括號調(diào)用過程(sub)。不過,用Call語句調(diào)用函數(shù)或sub時,一定要使用圓括號。例如:
Dim I as Integer
Call EvaluateData(2, i)
EvaluateData 2, i
在VB.NET中,所有的方法調(diào)用都需要圓括號,而Call語句則是可選的。
ByVal是默認參數(shù)類型
在VB6.0中,在調(diào)用函數(shù)或sub時ByRef(傳址)是默認類型。那意味著所有改變將反映到傳入的變量。VB.NET改變了這種方式?,F(xiàn)在,默認的參數(shù)類型是ByVal(傳值)。
Optional關(guān)鍵字
VB6.0使用Optional關(guān)鍵字可用來讓用戶決定傳入一個默認值,之后在調(diào)用IsMissing函數(shù)判斷參數(shù)是否有效。
而在VB.NET中,每個可選參數(shù)必須聲明其默認值,無需調(diào)用IsMissing函數(shù)。例如:
Sub MyMethod(Optional ByVal i As Integer = 3) Return語句
VB.NET的Return語句與C++相似。使用Return語句把控制權(quán)從過程返還給調(diào)用者。在VB6.0中,Return語句與GoSub語句一起使用。VB.NET不再支持GoSub語句。
流程控制的改變
下面是VB.NET對流程控制語句的修改:
1. GoSub不再受到支持。
2. Call、Function和Sub語句均可用于調(diào)用過程。
3. On ... GoSub和On ... GoTo語句不再受支持??梢允褂肧elect Case語句來替代。
4. While ... Wend語句現(xiàn)在改為While…End While語句。不再支持Wend關(guān)鍵字。
小結(jié)
Visual Basic .NET是.NET版本的Visual Basic。通過本文你了解到VB.NET的基本概念,而且也從VB6.0開發(fā)者的角度對VB.NET進行了考察。