.NET框架介紹
.NET框架最主要兩個組成部分是公共語言執行時(CLR)和框架類庫(FCL),基礎類庫(BCL)是FCL的一個子集。
.NET框架的主要結構
最下層無疑是作業系統,在.NET中,運行於底層的是CLR,CLR是公共語言基礎設施(CLI)的一個實現。在CLR上,.NET提供了豐富的FCL,這些類庫透過CLR呼叫作業系統的API來實現各種功能。這些類庫中一些基礎的類組成BCL。在類庫之上,.NET各種語言共同實現了CLS。
.NET框架主要成員兩步編譯和跨平臺
轉化成機器碼的過程有兩種主要形式,編譯和解釋。
編譯是將一種語言轉換為機器碼或者某種公共語言,機器碼可以看作所有語言的目標公共語言。編譯器讀入一個檔案時,將會產生一個目標語言寫成的檔案,比如C#編譯器產出副檔名為.exe或者.dll的檔案,目標語言是IL。
解釋也會將程式碼翻譯成機器碼,但是不會產生目標檔案,所以每次執行解釋型語言時都要重新解釋。
.NET平臺的兩步編譯
.NET框架的語言是透過兩步編譯變成機器碼的。第一步使用.NET自帶的編譯器生成IL中間語言。第二步在執行時CLR使用JIT將IL轉換為機器碼。即時編譯的形式會將翻譯過的程式碼快取起來降低效能損耗,所以它的效能比普通的解釋型語言(沒有快取)要快。執行完畢程式退出後快取的內容就消失了,每次執行都要重新編譯。
跨平臺,一次編譯,到處執行,一次編譯即第一步編譯:轉換為中間語言。C#的編譯器csc.exe將C#程式碼編譯為IL,拿到IL後透過在特定平臺的執行程式(CLR),解釋和編譯IL為機器碼來執行。
CLR
.NET平臺的核心。CLR中元件間的溝通規範由元資料負責,所以每個可遷移執行檔案(.exe)都包含了元資料,便於CLR知道檔案內部的型別是什麼。CLR絕大部分功能是為了保證程式在執行時順利執行的,管理.NET程式集的執行,運行於作業系統之上。
有些功能僅僅是作業系統的一個再包裝,例如執行緒、記憶體管理等。實際上也是進一步呼叫作業系統的API,訪問核心物件。
託管程式碼必須是在CLR下執行的程式碼。非託管程式碼則不需要CLR就可執行。
CLI
公共語言基礎設施,是一個規範,類似於一個產品的說明書,CLR是CLI的一個實現,類似於一個開發者遵循說明書所開發出來的產品。
CTS和CLS
CLR最主要兩個組成部分是CTS和CLS,CTS是計算機語言的一種語法規範,比如允許介面、類、結構、列舉這些型別的存在。
CTS是微軟規定的一套約束,標準化語法,所有服從CTS的語言都可以看成是.NET框架的語言。
.NET框架的眾多語言都只實現了CTS的一部分功能,這部分功能稱之為CLS,這是這些語言相互使用的前提。如果你建立一個新語言,但是不滿足CLS的要求,那你的語言就不能被其他.NET框架的語言使用。
CTS和CLS的關係
框架類庫(FCL)
.NET提供了豐富的框架類庫。這樣我們就不用編寫大量的程式碼來處理大量的日常操作。BCL是FCL的一個子集。FCL是我們用到的所有外部參考,而BCL是其中不需要手動引用的部分。
基礎類庫(BCL)
BCL是微軟提出的一組標準庫,可提供給.NET Framework所有語言使用,當安裝.NET Framework時,所有的BCL都部署到全域性程式集快取(GAC)中,所以不需要在工程中手動引用任何基礎類庫,它們會被自動引用。
BCL是屬於整個.NET框架的,並不是某種語言的一個基礎類庫。