CLR VB.NET學(xué)習(xí)經(jīng)驗(yàn)
VB.NET還是比較常用的,于是我研究了一下CLR VB.NET,在這里拿出來(lái)和大家分享一下,希望對(duì)大家有用。
迄今為止,業(yè)界對(duì)VB.NET討論得最多的特色或許就是CLR VB.NET運(yùn)行在CLR之上,正是CLR VB.NET帶來(lái)了許多關(guān)鍵的新特色(包括缺點(diǎn)在內(nèi))。例如,CLR使得VB.NET支持跨語(yǔ)言的繼承以及自由線程。
在VB6 中,分布式VB程序要求有VB運(yùn)行時(shí)庫(kù)msvbvm60.dll支持,即該運(yùn)行時(shí)庫(kù)必須隨同應(yīng)用一起分發(fā)。其他許多語(yǔ)言,比如C++ 和Java,也有類似的要求。
在.NET中,所有Visual Studio 語(yǔ)言共享同樣的運(yùn)行時(shí)環(huán)境CLR.改用CLR帶來(lái)了幾個(gè)重要的結(jié)果:現(xiàn)在所有Visual Studio 語(yǔ)言都共用同樣的IDE 、同樣的窗體引擎、同樣的異常處理機(jī)制,等等。它意味著VBc在很大程度上已經(jīng)可以和.NET的其他語(yǔ)言相提并論,如C#等。然而,對(duì)于CLR 的異議仍舊存在,VB業(yè)界仍在激勵(lì)地爭(zhēng)辯它地價(jià)值。
不管應(yīng)用是用VB、C#還是其他.NET語(yǔ)言編寫(xiě),所有VS.NET代碼都是編譯成中間語(yǔ)言(Intermediate Language ,IL)。當(dāng)應(yīng)用運(yùn)行時(shí),一個(gè)實(shí)時(shí)編譯器(just-in-time compiler ,或稱為JIT )就把IL代碼編譯成機(jī)器語(yǔ)言。在理論上,它意味著為非Windows 的平臺(tái)構(gòu)造.NET運(yùn)行環(huán)境是可能的,但目前還沒(méi)有出現(xiàn)有關(guān)這類系統(tǒng)的正式消息。IL有一個(gè)缺點(diǎn):正如VB在5.0 以前的版本,IL代碼對(duì)于類似的反向編譯工程很敏感。由于存在這種可能性,許多開(kāi)發(fā)者對(duì)于.NET框架的整體安全性抱有懷疑。
對(duì)CLR 進(jìn)行優(yōu)化影響IL層次上的代碼,它使得所有使用CLR 的語(yǔ)言受益。然而,對(duì)于特定語(yǔ)言的優(yōu)化涉及到如何把代碼編譯成IL代碼,它根據(jù)特定語(yǔ)言的語(yǔ)法進(jìn)行。因此,.NET各種語(yǔ)言之間存在一定的性能差異是必然的。但不管如何,從整體上來(lái)看這仍舊是好事,例如CLR 為VB帶來(lái)了和C#一樣的調(diào)試和分析工具——之所以能夠如此,是因?yàn)樗鼈兌际褂靡粯拥墓ぞ摺?/P>
CLR 提供了前所未有的跨語(yǔ)言集成能力,其中包括跨語(yǔ)言繼承代碼的能力。
所有使用CLR 的語(yǔ)言都使用一個(gè)公共類型系統(tǒng)(Common Type System),它使得開(kāi)發(fā)那些運(yùn)用多種語(yǔ)言的應(yīng)用變得更為容易。
在CLR 之內(nèi)運(yùn)行的代碼稱為“受管理的代碼”(Managed Code),受管理代碼所使用的內(nèi)存由CLR 全面控制。受管理的代碼有著許多優(yōu)點(diǎn),包括交叉語(yǔ)言集成、跨語(yǔ)言異??刂埔约耙粋€(gè)組件交互的簡(jiǎn)化模型。VB.NET只能以受管理代碼方式運(yùn)行,與此相對(duì)應(yīng),C#卻具有將代碼轉(zhuǎn)入非受管理方式運(yùn)行的能力(運(yùn)行在CLR 之外),比如執(zhí)行指針處理之類的操作。這是VB.NET不能與C#相提并論的地方之一。然而,這種能力的是否重要,對(duì)于不同的人、不同的用途來(lái)說(shuō)都有所不同。
由CLR 導(dǎo)致的體系上的不同不僅僅是跨語(yǔ)言繼承、共享功能和受管理代碼,它還有更深刻的意義。VB.NET 的底層體系不再是COM ;另外,VB.NET中所有東西都是對(duì)象,甚至連字符串也一樣。由于這些原因以及其他許多原因,Microsoft 改變了底層體系管理對(duì)象的方法。COM 系統(tǒng)通過(guò)引用計(jì)數(shù)方式管理對(duì)象,每當(dāng)對(duì)象被引用時(shí),引用計(jì)數(shù)就增加。當(dāng)對(duì)象引用超出作用范圍或者被釋放時(shí),計(jì)數(shù)器的值就減少;一旦引用計(jì)數(shù)為0 ,對(duì)象就被釋放。Microsoft 聲稱。
NET 體系中的引用計(jì)數(shù)開(kāi)銷實(shí)在太大,使得.NET采用引用計(jì)數(shù)不再合適,因此它就放棄了引用計(jì)數(shù),改用垃圾回收(Garbage Collection)。以上介紹CLR VB.NET。
【編輯推薦】