圖文講解.NET CLR是什么
大家首先要清楚的是,.NET平臺與C#不是一回事.這點大家一定要明白,對開發(fā)人員來講他有兩個概念。第一,它是C#,VB.net等程序運行的平臺。第二,它因為為這些語言提供了豐富的類庫(稱之為基類庫),.NET CLR是什么我們現(xiàn)在來一起看看吧。
NET CLR是什么
對于一個將要面向.NET平臺進行開發(fā)的人來說,了解一下.NET平臺的整個構(gòu)成是非常有必要的,如圖1所示即說明了.NET平臺的整體結(jié)構(gòu):

這個圖就是著名的.NET平臺結(jié)構(gòu)圖,從這個圖上可以看到,.NET Framework是在Microsoft.NET平臺上開發(fā)的基礎(chǔ),ASP.NET、Windows Forms 和VS.NET都不過是.NET平臺開發(fā)的一部分,他的用于.NET應(yīng)用程序的開發(fā)及展示。.NET平臺的核心技術(shù)為:通用語言運行時(CLR:Common Language Runtiome)、基類庫(BCL:Base Class Library)、.NET語言及Visual Studio.NET
從這個圖上可以看出,.NET Framework是架構(gòu)在Windows平臺上的一個虛擬的運行平臺,你可以想象將最下層Windows換做其他的操作系統(tǒng),例如說Linux,一樣可以實現(xiàn)使用符合CLS(Common Language Specification,通用語言規(guī)范)的.NET語言,(VB.NET、C#、JScript.NET等),來創(chuàng)建ASP.NET或Windows Form(可能會叫Linux Forms)應(yīng)用程序的功能,這其實就是Mono計劃要實現(xiàn)的功能。所以可以這么認為,理論上,C#是一種可以跨平臺的語言,這很象Java。C#另一個比較象Java的地方是,它也是一種(特殊意義上的)語言,同Java一樣,C#編寫的程序代碼也是先通過C#編譯器編譯為一種特殊的字節(jié)代碼, (Microsoft Intermediate Language,MSIL,微軟)中間語言,運行時再經(jīng)由特定的編譯器(JIT編譯器,Just In tIME, JITer)編譯為機器代碼,以供操作系統(tǒng)執(zhí)行.
不僅是C#語言,所有.NET語言(將會包括我們常用的幾十種現(xiàn)代的編碼語言)都可以編寫面向CLR的程序代碼,這種代碼在.NET中被稱為托管代碼(Managed Code),所有的Managed Code都直接運行在CLR上,具有與平臺無關(guān)的特性。
解釋性的語言很安全,并且可以通過他的運行平臺為其賦予更多的功能,例如自動內(nèi)存管理,異常處理等,事實上,C#語言的許多特點都是由CLR提供的,如圖2所示的CLR結(jié)構(gòu)圖說明了這一點。
從圖2可以看到,C#所具有的許多特點都是由CLR提供的,如類型安全(Type Checker)、垃圾回收(Garbage Collector)、異常處理(Exception Manager)、向下兼容(COM Marshaler)等,具體的說,.NET上的CLR為開發(fā)者提供如下的服務(wù):
◆平臺無關(guān):CLR實際上是提供了一項使用了虛擬機技術(shù)的產(chǎn)品,他構(gòu)架在操作系統(tǒng)之上,并不要求程序的運行平臺是 Windows系統(tǒng),只要是能夠支持它的運行庫的系統(tǒng),都可以在上面運行.NET應(yīng)用。所以,一個完全由托管代碼組成的應(yīng)用程序,只要編譯一次,就可以在任何支持.NET的平臺上運行.
◆跨語言集成:CLR語序開發(fā)這以任何語言進行開發(fā),用這些語言開發(fā)的代碼,可以在CLR環(huán)境下緊密無縫的進行交叉調(diào)用,例如,可以用VB聲明一個基類對象,然后在C#代碼中直接創(chuàng)建次基類的派生類。
◆自動內(nèi)存管理:CLR提供了拉架收集機制,可以自動管理內(nèi)存。當對象或變量的生命周期結(jié)速后,CLR會自動釋放他們所占用的內(nèi)存.
◆跨語言異處理
◆版本控制
◆.NET安全
◆簡單的組件互操作性。
◆自描述組件:自描述組件是指將所有數(shù)據(jù)和代碼都放在一個文件中的執(zhí)行文件。自描訴組件可以大大簡化系統(tǒng)的開發(fā)和配置,并且改進系統(tǒng)的可靠性。
通用語言運行時(CommonLanguageRuntiome,CLR)最早被稱為下一代Windows服務(wù)運行時(NGWS Runtime).它是直接建立在操作系統(tǒng)上的一個虛擬環(huán)境,主要的任務(wù)是管理代碼的運行。CLR現(xiàn)在支持幾十種現(xiàn)代的編程語言為它編寫代碼,然后以一種中間語言(Intermediate Langeoage,IL)代碼的形成被執(zhí)行。并且,CLR還提供了許多功能以簡化代碼的開發(fā)和應(yīng)用配置,同時也改善了應(yīng)用程序的可靠性。如你所知,如果某種語言的編譯器是以運行時為目標的,那么利用該語言開發(fā)生成的代碼在.NET中被稱為托管代碼,因為這樣的代碼是直接運行在CLR上的,所以具有與平臺無關(guān)的特點。
在.NET平臺結(jié)構(gòu)圖中,CLR的上面是.NET的基類庫,這組基類庫包括從基本輸入輸出到數(shù)據(jù)訪問等各方面,提供了一個統(tǒng)一的面向?qū)ο蟮?,層次化的,可擴展的編程接口。從.NET平臺結(jié)構(gòu)圖中也可以看到,基類庫可以被各種語言調(diào)用和擴展,也就是說不管是 C#,VB.NET還是VC++.NET,都可以自由的調(diào)用,.NET的類庫,因為C#自身只有77個關(guān)鍵字,而且語法對程序員來說無需費工夫?qū)W習。 BCL則相反,它包含了4500個以上的類和無數(shù)的方法,屬性,在你的C#程序中隨時都可能會用到它來完成自己的任務(wù).
還有一個很重要的概念你需要明白,這就是公共語言架構(gòu)(Common Language Infrastructure,CLI).CLI是CLR的一個子集,也就是.NET中最最終對編譯成MSIL代碼的應(yīng)用程序的運行環(huán)境進行管理的那一部分。在CLR結(jié)構(gòu)圖中CLI位于下半部分,主要包括類加載器(Class Loader)、實時編譯器(IL To Native Compilers)和一個運行時環(huán)境的垃圾收集及將使用任何語言編寫的代碼,通過其特定的編譯器轉(zhuǎn)換為MSIL代碼之后運行其上,甚至還可以自己寫 MSIL在CLI上運行.以上就是介紹.NET CLR是什么。
【編輯推薦】