易于反編譯的中間語言
無論是用VB、C#或其他的.NET編程語言編寫的軟件都會被編譯成一種"中間語言"(IL),只有在軟件運行時,一個運行時編譯器(JITter)才將IL代碼編譯成機器語言,這在理論上就意味著創建非Windows平臺的.NET運行庫是可能的,但目前關于這一點還沒有任何的官方說法。IL的一個不足之處是:它可以非常容易在VB5中進行反編譯,使得許多開發人員都懷疑.NET架構的安全性。
在IL一級對代碼有影響的CLR的變化能使所有的使用CLR的開發人員受益。對特定語言的優化主要與如何將這種語言編譯為IL的質量有關,因此從技術上說,在不同的.NET語言之間還是有著細微的差別。盡管如此,總體情況還是很好的,比如,VB與C#具有相同水平的調試和分析工具,因為它們使用的就是同一個工具。
CLR提供了空前的跨語言集成能力,其中包括跨語言的代碼繼承。所有的使用CLR的語言都共享一個相同的類型系統,這就使得利用多種編程語言開發軟件變得更為簡單。
在CLR中運行的代碼被稱作管理代碼,它使用的內存是完全由CLR控制的。管理代碼帶來的好處是顯而易見的,包括跨語言的集成性、跨語言的異常處理和組件交互的單一模型。Visual Basic只能使用管理代碼,而C#則還可以不使用管理代碼(不使用運行庫),使用指針管理等功能,這是VB與C#的一個不同之處,這一點的重要性取決于你需要完成的任務。
The architectural differences imposed by the CLR run deeper than cross-language inheritance, shared features, and managed code. For one, 由CLR帶來的結構上的差異性遠不止跨語言的繼承、共享的特性和管理代碼。Visual Studio.NET的基礎架構不是COM,包括字符串在內的VB.NET中的所有元素都是對象。基于這些原因和其他的一些原因,微軟改變了基礎架構處理對象的方式,每當引用一個對象時,COM都把對象引用計數器加1。如果釋放了一個對象則計數器減1,當計數器減為0后這個對象也結束了。
自由線程帶來的風險
無用單元的收集