淺析VB.NET語(yǔ)言到底帶來(lái)了什么
VB.NET語(yǔ)言經(jīng)過(guò)長(zhǎng)時(shí)間的發(fā)展,很多用戶都很了解VB.NET語(yǔ)言了,這里我發(fā)表一下個(gè)人理解,和大家討論討論。
VB.NET語(yǔ)言到底給我們帶來(lái)了什么
微軟公司推出的.NET 平臺(tái)完全改變了VB的編程世界。.NET 戰(zhàn)略邁出的首要一步就是發(fā)布了最新的軟件開(kāi)發(fā)包: Visual Studio.NET。開(kāi)發(fā)團(tuán)體對(duì)新一門(mén)編程語(yǔ)言C# 議論紛紛,但在這紛繁的變化之中人們卻忽略了一個(gè)更為重要的新聞:VB發(fā)生了顛覆性的重大變化,這就是本文要探討的宗旨,我們要引領(lǐng)讀者領(lǐng)略一下VB.NET語(yǔ)言到底給我們帶來(lái)了什么。
.NET世界內(nèi)的每一種編程語(yǔ)言都必須和CLR(公共語(yǔ)言運(yùn)行時(shí):Common Language Runtime)打交道。你完全可以把這個(gè)新事物看成類(lèi)似以往必須分派的VB運(yùn)行時(shí),當(dāng)然,和老家伙相比,新玩意兒的規(guī)模更大,有些很酷的小東西也取消了。為了應(yīng)付公共語(yǔ)言運(yùn)行時(shí), VB也必須隨之有所改變,最重要的就是支持真正的面向?qū)ο缶幊獭J堑模阍缇徒?jīng)常用VB處理各種對(duì)象了,某些VB開(kāi)發(fā)人員甚至反復(fù)地在IDE內(nèi)“實(shí)現(xiàn)”面向?qū)ο蟮腣B程序,但是, VB6確實(shí)沒(méi)有達(dá)到支持面向?qū)ο笳Z(yǔ)言所應(yīng)該達(dá)到的合理程度。
這可不是說(shuō)VB開(kāi)發(fā)人員就不知道面向?qū)ο蟮暮谩5菑哪撤N意義上說(shuō),VB程序員因?yàn)閂B所限多少懸在了面向?qū)ο蠛蛡鹘y(tǒng)編程的半空中。結(jié)果呢,大多數(shù)VB程序員不過(guò)是典型的過(guò)程編程的實(shí)踐者,對(duì)面向?qū)ο蠹夹g(shù),比如COM可以說(shuō)很少體驗(yàn)。這一事實(shí)令微軟公司必須面臨抉擇:程序員的思想共享可是技術(shù)領(lǐng)域最有價(jià)值的無(wú)形資產(chǎn)啊!最激進(jìn)的變革無(wú)非是讓.NET把 VB扔到一邊,讓競(jìng)爭(zhēng)對(duì)手如Java之類(lèi)緊緊俘獲程序員的心靈。好在茫然之際曙光初現(xiàn):VB.NET來(lái)了。
語(yǔ)法和VB.NET語(yǔ)言變了樣
學(xué)習(xí)編程語(yǔ)言的語(yǔ)法通常比學(xué)習(xí)圍繞這一語(yǔ)言的技術(shù)行話要容易得多。超出編程語(yǔ)言的領(lǐng)域再看,這一事實(shí)對(duì)Web編程和面向?qū)ο蟮雀鼮榇笮偷能浖こ桃餐瑯佑行АT谙蛎嫦驅(qū)ο蠹夹g(shù)進(jìn)軍途中最令人畏懼的任務(wù)就是理解一大堆陌生的面向?qū)ο笮g(shù)語(yǔ),比如繼承和重載等等。這些術(shù)語(yǔ)(比如類(lèi))往往具有不同的含義。
類(lèi)
類(lèi)是面向?qū)ο蠹夹g(shù)的核心概念。當(dāng)然,目前的VB語(yǔ)言也支持類(lèi)技術(shù),但是,對(duì)VB.NET而言情況就完全不同了。對(duì)初學(xué)者來(lái)說(shuō),類(lèi)開(kāi)始和終止于某個(gè)代碼塊而非一個(gè)具體的文件。Public Class MyClass….End Class定義了一個(gè)類(lèi);這樣只在一個(gè)文件里就可以定義多個(gè)類(lèi)。其次,你再也不能對(duì)類(lèi)進(jìn)行“SET”操作;實(shí)際上,你干脆把關(guān)鍵詞SET忘了吧!對(duì)屬性的讀取和賦值也取消了;它們都用一種更為智能的語(yǔ)法代替了。最重要的是,你必須把自己定義的類(lèi)設(shè)想為物理實(shí)體的虛擬代表。CLR在對(duì)象分配時(shí)表現(xiàn)如此之好動(dòng)作如此之快以至于創(chuàng)建對(duì)象的代價(jià)幾乎為0。在VB編程中,開(kāi)發(fā)人員創(chuàng)建一個(gè)很棒的對(duì)象往往勉為其難,這可是個(gè)很大的缺陷,原因就在于整個(gè)過(guò)程拖拉的可以,現(xiàn)在這些問(wèn)題都被解決了。
重載
開(kāi)發(fā)人員經(jīng)常為滿足特定需要而編寫(xiě)一塊代碼。隨著開(kāi)發(fā)工作的繼續(xù),這段代碼往往會(huì)逐漸包括越來(lái)越多的功能。這種代碼膨脹現(xiàn)象有時(shí)會(huì)讓處理參數(shù)的數(shù)目多得驚人。到這個(gè)地步,你就必須增加相當(dāng)可觀的邏輯針對(duì)這些傳遞過(guò)來(lái)的參數(shù)做出執(zhí)行決策,否則你就可能不得不創(chuàng)建更多的函數(shù)而它們要做的事情卻幾乎差不多。這種情況存在大量的問(wèn)題,這些令人頭痛的問(wèn)題正好可以通過(guò)方法重載技術(shù)來(lái)
解決。
方法重載技術(shù)可以讓程序員編寫(xiě)多個(gè)名字一樣的方法,但這些方法的傳遞參數(shù)卻不同。在方法被調(diào)用的時(shí)候,參數(shù)列表會(huì)被自動(dòng)計(jì)算然后調(diào)用正確的方法。在這種情況下,你就不必編寫(xiě)任何判斷邏輯來(lái)處理需要執(zhí)行的程序代碼了。
構(gòu)造
當(dāng)類(lèi)被創(chuàng)建或者破壞時(shí)需要調(diào)用某些特殊的函數(shù)。你可能在VB6中已經(jīng)熟悉這些函數(shù)了,在VB6中它們就是Class_Initialize和 Class_Terminate程序。在這些程序中增加邏輯也是可能的,而增加參數(shù)則絕不被允許。在創(chuàng)建類(lèi)的時(shí)候有條件準(zhǔn)備的資源還不可用。而在 VB.NET環(huán)境下,這些公共方法,也就是類(lèi)構(gòu)造器和破壞器,其處理能力被大大擴(kuò)展了。最有用的變化就是可以在New方法中增加參數(shù),而后者正是代替 Class_Initialize的方法。這一特性被稱(chēng)作“參數(shù)化構(gòu)造器”,可以令類(lèi)的內(nèi)部資源分配效率更高。你可以用這種技術(shù)重載New方法而獲得令人難以置信的靈活性。
【編輯推薦】