直播中
在VB6中,分布式VB程序要求有VB運(yùn)行時庫msvbvm60.dll支持,即該運(yùn)行時庫必須隨同應(yīng)用一起分發(fā)。其他許多語言,比如C++和Java,也有類似的要求。在.NET中,所有Visual Studio語言共享同樣的運(yùn)行時環(huán)境CLR。改用CLR帶來了幾個重要的結(jié)果:現(xiàn)在所有Visual Studio語言都共用同樣的IDE、同樣的窗體引擎、同樣的異常處理機(jī)制,等等。它意味著Visual Basic在很大程度上已經(jīng)可以和.NET的其他語言相提并論,如C#等。然而,對于CLR的異議仍舊存在,VB業(yè)界仍在激勵地爭辯它地價(jià)值。
不管應(yīng)用是用VB、C#還是其他.NET語言編寫,所有VS.NET代碼都是編譯成中間語言(Intermediate Language,IL)。當(dāng)應(yīng)用運(yùn)行時,一個實(shí)時編譯器(just-in-time compiler,或稱為JIT)就把IL代碼編譯成機(jī)器語言。在理論上,它意味著為非Windows的平臺構(gòu)造.NET運(yùn)行環(huán)境是可能的,但目前還沒有出現(xiàn)有關(guān)這類系統(tǒng)的正式消息。IL有一個缺點(diǎn):正如VB在5.0以前的版本,IL代碼對于類似的反向編譯工程很敏感。由于存在這種可能性,許多開發(fā)者對于.NET框架的整體安全性抱有懷疑。
對CLR進(jìn)行優(yōu)化影響IL層次上的代碼,它使得所有使用CLR的語言受益。然而,對于特定語言的優(yōu)化涉及到如何把代碼編譯成IL代碼,它根據(jù)特定語言的語法進(jìn)行。因此,.NET各種語言之間存在一定的性能差異是必然的。但不管如何,從整體上來看這仍舊是好事,例如CLR為VB帶來了和C#一樣的調(diào)試和分析工具——之所以能夠如此,是因?yàn)樗鼈兌际褂靡粯拥墓ぞ摺?
CLR提供了前所未有的跨語言集成能力,其中包括跨語言繼承代碼的能力。所有使用CLR的語言都使用一個公共類型系統(tǒng)(Common Type System),它使得開發(fā)那些運(yùn)用多種語言的應(yīng)用變得更為容易。
在CLR之內(nèi)運(yùn)行的代碼稱為“受管理的代碼”(Managed Code),受管理代碼所使用的內(nèi)存由CLR全面控制。受管理的代碼有著許多優(yōu)點(diǎn),包括交叉語言集成、跨語言異??刂埔约耙粋€組件交互的簡化模型。Visual Basic.NET只能以受管理代碼方式運(yùn)行,與此相對應(yīng),C#卻具有將代碼轉(zhuǎn)入非受管理方式運(yùn)行的能力(運(yùn)行在CLR之外),比如執(zhí)行指針處理之類的操作。這是VB.NET不能與C#相提并論的地方之一。然而,這種能力的是否重要,對于不同的人、不同的用途來說都有所不同。