什麼是.NET?html
起源:比爾蓋茨在2000年的Professional Developers Conference介紹了一個嶄新的平臺叫做Next Generation Windows Service,也就是後來的.NET。編程
軟件層:.NET能夠被看做是介於操做系統和編程語言之間的軟件層,它能夠支持多種編程語言,包括C#,VB.NET,C++,F#,等等。安全
用來產生託管代碼的框架、平臺:傳統的編譯方式是"源代碼→編譯→可執行文件",在.NET中編譯方式是"源代碼→編譯→程序集→可執行文件"。編譯後的程序集包含IL代碼和元數據,在運行時再轉換成機器代碼。框架
按開發到執行階段來講:開發階段.NET提供了龐大的類庫,在程序執行階段,.NET提供了一個CLR運行時環境幫助咱們實時編譯程序、進行安全檢查、執行垃圾回收,管理內存等。
編程語言
規範:.NET包含了衆多的規範,好比CIL,BCL, FCL, CTS, CLS,等等。spa
什麼是IL?操作系統
IL,Intermediage Language,中間語言,並非CPU能夠直接執行的本地機器語言,在轉換成計算機能夠識別的指令以前,還要進行一個被稱爲"Just in time"的二次編譯過程。在.NET框架下,任何語言,好比C++,VB.NET,C#,等等,在通過各自的編譯器編譯以後,都會被轉換成中間語言。IL還有另外的2種叫法:CIL,Common Intermediate Language;MSIL, Microsoft Intermediate Language。htm
查看IL代碼,參考這裏:http://www.cnblogs.com/darrenji/p/3967669.htmlblog
什麼是CLI?繼承
CLI,Common Language Infrastructure, 公用語言基礎, .NET的各類規範都遵循了這個標準。
什麼是BCL?
BCL, Basic Class Library, .NE爲咱們提供的基類庫。
建立一個控制檯項目。
把鼠標停留在Console上,並按F12。
發現Console是System的成員,點擊System。
發現System是mscorlib的成員,點擊mscorlib。
發現mscorlib是一個程序集,位於C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\mscorlib.dll
也就是mscorlib包含了.NET的基類庫。
string類型是否屬於基類庫呢?
把鼠標停留在string關鍵字上,並按F12。
發現string其實是System.String類型,原來.NET爲咱們把關鍵字string和CLI標準System.String做了映射。
依此類推, btye映射了System.Byte, short映射了System.Int16, 等等。
像string, byte, short,等等,這些都是基元類型。因此,凡是把語言本省的關鍵字與CLI的類型映射起來的,都叫基元類型。
什麼是FCL?
FCL, Framework Class Library, 框架類庫,提供的類庫更多,BCL是FCL的子集。好比,在ASP.NET MVC下提供了System.Web.MVC。
什麼是CTS?
CTS, Common Type System, 公共類型系統。CTS規定了在編程語言中能夠定義的方面,包括:類、結構、委託,類中的方法、字段、屬性、事件等,還定義了一些約束,好比全部類型都隱式繼承自System.Object類型。
什麼是CLS?
CLS, Common Language Specification, 公共語言規範,必須徹底符合CTS的標準,是CTS的子集。好比C#編譯生成的程序集有不少類,VB編譯生成的程序集也有不少類,如今VB編譯須要引用C#程序集的某個類,怎麼辦呢?
咱們須要讓C#程序集中,須要被引用的這個類符合CLS規範,.NET爲咱們準備了CLSCompliant特性。
[assembly:CLSCompliant(true)]public class SomeClass{}
什麼是CLR?
CLR, Common Language Runtime, 公用語言運行時。IL代碼須要經過CLR進行即時編譯才能轉換成機器代碼。大體過程是:
編程語言代碼編譯生成程序集。程序集中的PE/COFF頭包含了供Windows操做系統查看和使用的信息;CLR頭告訴操做系統這是一個.NET程序集;程序集清單描述了程序集自己的信息,好比程序集標識、程序集包含的資源、組成程序集的文件,等等;元數據描述了程序集包含的內容,好比包含的模塊、類型、類型成員、類型成員的可見性,等等。
CLR開始工做:管理應用程序域,加載和運行程序集, 安全檢查, 將IL代碼JIT編譯成機器代碼,異常處理, 垃圾回收,等等。
相關文章:
CLR如何加載程序集以及程序集版本策略 http://www.cnblogs.com/darrenji/p/4179916.html
查看是否安裝.NET Framework、.NET Framework的版本號、CLR版本號 http://www.cnblogs.com/darrenji/p/3977406.html
CLR是如何被加載並工做的 http://www.cnblogs.com/darrenji/p/4159259.html
什麼是JIT?
JIT, just in time, 即時編譯。在CLR中,把IL轉換成機器代碼的工做交給了JIT編譯器。即時編譯只在方法第一次被調用時發生。