孫利娟
(開(kāi)封教育學(xué)院,河南 開(kāi)封 475004)
Visual Basic 6.0(簡(jiǎn)稱VB6.0)和Visual Basic.NET(簡(jiǎn)稱VB.NET)都是美國(guó)微軟公司推出的編程工具, 適合在Windows 環(huán)境下開(kāi)發(fā)各類應(yīng)用程序。它們的前身是QBASIC,語(yǔ)言基礎(chǔ)是BASIC (Biginners All-Purpose Symbolic Instruction Code, 即初學(xué)者通用符號(hào)指令代碼)。 BASIC 是20 世紀(jì)60 年代美國(guó)的Dart Mouth 學(xué)院的兩位教授共同設(shè)計(jì)的計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,最初運(yùn)行在DOS 環(huán)境下,是當(dāng)時(shí)最流行的高級(jí)語(yǔ)言之一。 微軟公司于1991 年發(fā)布VB1.0, 用于輕松開(kāi)發(fā)應(yīng)用最廣泛的窗體應(yīng)用程序,極大地推動(dòng)了Windows 應(yīng)用程序的開(kāi)發(fā)。 此后版本不斷升級(jí),至1998 年8 月推出VB6.0。Visual Basic.NET 是微軟公司在2002 年推出的一種開(kāi)發(fā)基于.NET 平臺(tái)的Microsoft Visual Studio .NET 套件中主要組成部分之一,是微軟公司極力推薦的一種開(kāi)發(fā).NET 平臺(tái)應(yīng)用程序的開(kāi)發(fā)語(yǔ)言,也是目前世界上最為流行的編程工具之一[1]。
VB6.0 是一種基于對(duì)象的可視化開(kāi)發(fā)工具,是專門為Microsoft 的32 位操作系統(tǒng)設(shè)計(jì)的,可用于開(kāi)發(fā)通信、數(shù)據(jù)庫(kù)、多媒體以及普通的Windows 應(yīng)用程序。 由于它秉承了VB 語(yǔ)言簡(jiǎn)單易學(xué)易用、功能強(qiáng)大的一貫特性,更由于VB6.0 新增在數(shù)據(jù)庫(kù)訪問(wèn)、控件以及支持Internet 方面的設(shè)計(jì)實(shí)現(xiàn)功能,使之成為廣大程序愛(ài)好者和專業(yè)開(kāi)發(fā)人員首選的編程工具。
NB.NET 是在VB6.0 的基礎(chǔ)上發(fā)展起來(lái)的,其語(yǔ)法與VB6.0相似,但VB.NET 并不是VB6.0 的簡(jiǎn)單升級(jí),而是增加了更多特性,演化為完全面向?qū)ο螅ň拖馛++)的編程語(yǔ)言,具有完全面向?qū)ο蟮奶匦裕缋^承、封裝、重載、多態(tài)等。VB.NET支持基于網(wǎng)絡(luò)應(yīng)用的開(kāi)發(fā), 適應(yīng)了電子商務(wù)時(shí)代的發(fā)展要求,除滿足一般編程和客戶/服務(wù)器應(yīng)用開(kāi)發(fā)的需要外,更為精彩的是,它還可以像創(chuàng)建普通表單一樣創(chuàng)建用戶自己的Web 動(dòng)態(tài)頁(yè)面。 VB.NET 的界面和編程風(fēng)格都統(tǒng)一在Visual Stutio.NET 下,一個(gè).NET項(xiàng)目支持多種語(yǔ)言的結(jié)合,用戶可以根據(jù)開(kāi)發(fā)的實(shí)際需求,自由選擇c#、Visual Basic .NET、Visual C++.NET 語(yǔ)言。 這樣既可以發(fā)揮各種語(yǔ)言各自特有的優(yōu)勢(shì),又可以節(jié)省企業(yè)對(duì)員工進(jìn)行開(kāi)發(fā)語(yǔ)言培訓(xùn)的費(fèi)用。 VB6.0 中的兩個(gè)薄弱環(huán)節(jié)——多線程和異常處理,在VB.NET 中得到了較好處理,開(kāi)發(fā)多線程應(yīng)用和使用C++/C# 別無(wú)二致, 結(jié)構(gòu)化異常處理也得到支持。
兩個(gè)軟件的集成開(kāi)發(fā)環(huán)境有較大變化。 (1)VB6.0 默認(rèn)只顯示一個(gè)工具箱, 不分類型, 而VB.NET 工具箱將工具分成了多種類型,每一種類型以標(biāo)簽形式顯示,包括數(shù)據(jù)類型、組件類型和Windows窗體類型,可隱藏或完全展開(kāi),工具數(shù)量大大增加。(2)VB6.0 和VC6.0 的開(kāi)發(fā)環(huán)境是各自獨(dú)立的,而Visual Studio .NET 把VB.NET、VC.NET、C#.NET、VJ#.NET 統(tǒng)一到一個(gè)集成開(kāi)發(fā)環(huán)境中。在該環(huán)境下,不同語(yǔ)言之間的數(shù)據(jù)和代碼交換也更方便,極大地簡(jiǎn)化了應(yīng)用程序開(kāi)發(fā)步驟,提高了編程效率。 另外,在先前的版本中,公用類界面對(duì)于用戶總是隱藏的,在Visual Basic.NET 中, 公用類可以在代碼窗口中瀏覽和編輯。
.NET 平臺(tái)為所有支持語(yǔ)言提供了公共類型系統(tǒng),這就意味著所有語(yǔ)言都必須支持公共語(yǔ)言運(yùn)行環(huán)境所強(qiáng)制的相同的數(shù)據(jù)類型。 這樣就消除了不同語(yǔ)言之間數(shù)據(jù)類型的不兼容性。 例如,在一個(gè)32 位的Windows 平臺(tái)上,在C++這類語(yǔ)言中,Integer 數(shù)據(jù)類型占據(jù)4 個(gè)字節(jié),而在VB6.0 中,則占據(jù)2 個(gè)字節(jié)。 VB.NET 中與數(shù)據(jù)類型有關(guān)的變化為:(1)在.NET 下,VB.NET 中的Integer 數(shù)據(jù)類型也是4 個(gè)字節(jié)。 (2)VB.NET 沒(méi)有Currency 數(shù)據(jù)類型,作為代替,它提供了Decimal。 (3)VB.NET 引入了一種新的數(shù)據(jù)類型,叫做Char。Char 數(shù)據(jù)類型占據(jù)2 個(gè)字節(jié),可以存儲(chǔ)Unicode 字符。(4)VB.NET 沒(méi)有Variant 數(shù)據(jù)類型。 為了得到與Variant 類型相同的結(jié)果,可以使用Object 數(shù)據(jù)類型。 因?yàn)樵?NET 中的一切(包括原始數(shù)據(jù)類型),都是一個(gè)對(duì)象,一個(gè)Object 類型的變量,它可以指向任何數(shù)據(jù)類型。 (5)在VB.NET 中沒(méi)有固定長(zhǎng)度字符串的概念。
在VB6.0 中,我們使用Type 關(guān)鍵字來(lái)聲明用戶自定義結(jié)構(gòu)。 VB.NET 引入了與此目的相同的結(jié)構(gòu)關(guān)鍵字Structure,語(yǔ)法的其他部分是相同的。
在VB6.0 中不能同時(shí)用一個(gè)類型名聲明多個(gè)變量和初始化變量[2],而VB.NET 則支持這個(gè)特性。如在一個(gè)簡(jiǎn)單的VB6.0 例子“Dim x,y As Integer”中,VB6.0 將x看成Variant,把y 看成Integer。 VB.NET 改進(jìn)了這個(gè)解釋,它將x 和y 都創(chuàng)建成Integer。另外,VB.NET 還允許在聲明語(yǔ)句中為變量賦初始值[3],如:Dim str1 As String=“hello”。
VB.NET 還引入了Read-Only(只讀)變量。 只讀變量不像常數(shù),聲明它的時(shí)候不用初始化,但是一旦你給它賦值,就不能再修改。
使用VB6.0 時(shí),用戶可以通過(guò)編程來(lái)自由定義數(shù)組的上限和下限。 而在VB.NET 中,數(shù)組的下限總是0,若定義數(shù)組為:Dim a (50) As String,實(shí)際創(chuàng)建的元素是51 個(gè),其中0 是下限,50 是上限。
在VB6.0 中,出于默認(rèn)屬性的原因,必須使用Set 聲明為變量分配一個(gè)對(duì)象例示。 也就是說(shuō),要給對(duì)象本身指定一個(gè)變量(與對(duì)象的默認(rèn)值屬性值相反),就必須要使用Set 關(guān)鍵字。 但是在VB.NET 中,是不允許默認(rèn)屬性的(除非是參數(shù)化了的屬性),因此就不需要使用Set 關(guān)鍵字。 同樣,Let 關(guān)鍵字也從VB.NET 的語(yǔ)法中去掉了。
VB.NET 最終結(jié)合了結(jié)構(gòu)化錯(cuò)誤處理。 關(guān)鍵字Try、Catch 和Finally 使得錯(cuò)誤處理變得簡(jiǎn)單,也使VB.NET 與C++或C# 這些語(yǔ)言可以并列起來(lái)。 Try… Catch 的模式允許開(kāi)發(fā)人員將可能導(dǎo)致例外的代碼放置在一個(gè)Try 模塊中。 如果那個(gè)代碼確實(shí)造成了一個(gè)例外(與造成錯(cuò)誤同義),就執(zhí)行Catch 模塊中的代碼[4]。
靜態(tài)方法指的是那些不需要開(kāi)發(fā)人員創(chuàng)建類的例示就能調(diào)用的方法。 例如有一個(gè)名為L(zhǎng) 的類,其中有一個(gè)非靜態(tài)方法NonStatic()和一個(gè)靜態(tài)方法Static(),就可以通過(guò)“L.Static()”調(diào)用靜態(tài)方法。 但是,非靜態(tài)方法則需要?jiǎng)?chuàng)建類的一個(gè)例示,如:
Dim ObjL as NewL()
ObjL.NonStatic()
VB.NET 允許在類中創(chuàng)建靜態(tài)方法。 創(chuàng)建時(shí),只需要給方法定義、加上前綴Shared 關(guān)鍵字即可。
在默認(rèn)狀態(tài)下,VB6.0 中所有的程序參數(shù)都是通過(guò)引用方式(ByRef)來(lái)傳遞的,而VB.NET 是用值方式(ByVal)來(lái)傳遞的。 不管程序和函數(shù)是否接收參數(shù),當(dāng)調(diào)用它們的時(shí)候都需要圓括號(hào)。 VB6.0 中,函數(shù)返回值使用語(yǔ)法為:FunctionName=return_value。在VB.NET 中, 可 以 使 用Return 關(guān) 鍵 字, 以return_value 方式來(lái)表示返回值,也可以繼續(xù)使用舊的語(yǔ)法。
在VB6.0中,我們使用了Property Get 和Prop erty Set/Let 在類中創(chuàng)建屬性。 它們分別出現(xiàn)在單獨(dú)的程序中[1],如:
Public Property Get PropertyName () as DataType
……
End Property
Public Property Let PropertyName (value as DataType)
……
End Property
在VB.NET 中,Property Get 和Property Let/Set這兩個(gè)語(yǔ)句被合并成一個(gè)Property 語(yǔ)句,而不再是兩個(gè)單獨(dú)的語(yǔ)句[1]。 另外,在Property 語(yǔ)句的Set 部分中,變量Value 指的是用戶給指定屬性賦值時(shí)輸入的那個(gè)值。
Public [ReadOnly|WriteOnly] Property Property Name as DataType
Get
Return m_var
End Get
Set
m_var = Value
End Set
End Property
除了原有的Private 和Public,VB.NET 引入了幾個(gè)新的關(guān)鍵字。 全部訪問(wèn)域關(guān)鍵字如表1 所示。
表1 VB.NET 全部訪問(wèn)域關(guān)鍵字列表Table 1 All access domain keywords list of VB.NET
另外,VB.NET 引入了命名空間 (namespace)的概念,每個(gè)類都?xì)w屬于某個(gè)namespace。 一個(gè)name space 是類和組件的邏輯組合,其目的在于將.NET class 按類別定義。
以上分析是作者根據(jù)應(yīng)用VB 6.0 和VB.NET的經(jīng)驗(yàn)作的一個(gè)小結(jié)。 通過(guò)這些比較,兩者之間的異同可見(jiàn)一斑。 隨著科學(xué)技術(shù)的快速發(fā)展,也將會(huì)有一些功能更強(qiáng)大、 應(yīng)用更方便的編程語(yǔ)言出現(xiàn)(如VB2005、VB2008 等), 這將需要我們不斷的學(xué)習(xí)和總結(jié)。
[1] 朱小平,曾文權(quán),段班祥. Visual Basic.NET 程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2007:1-5,62-63,104-105.
[2] 李光明.中文Visual Basic 6.0 程序設(shè)計(jì)教程[M]. 北京:冶金工業(yè)出版社,2002:22.
[3] 黃玉春. Visual Basic 程序設(shè)計(jì)與實(shí)訓(xùn)教程[M]. 北京:清華大學(xué)出版社,2006:25-26.
[4] 劉懷亮. Visual Basic.NET 程序設(shè)計(jì)[M]. 北京:冶金工業(yè)出版社,2007:20.