1.1 C#與.NET的關係
C#不能孤立地使用,必須與.NET Framework一起使用一起考慮。
(1)C#的體繫結構和方法論反映了.NET基礎方法論。
(2)多數情況下,C#的特定語言功能取決於.NET的功能,或依賴於.NET基類。
.NET支援的一些特性,C#並不支援。C#語言支援的另一些特性,.NET卻不支援。
1.2 公用語言運行庫(CLR)
1.2.1 平台無關性
.NET Framework 的核心是其運行庫環境,稱為公用語言運行庫(CLR)或.NET運行庫。
通常將CLR控制下啟動並執行代碼稱為Managed 程式碼(managed code)。
.NET編譯代碼的方式:
階段一:將原始碼編譯成Microsoft中繼語言(IL)。
*IL與JAVA中位元組碼類似。
階段二:CLR把IL編譯為平台專用的代碼。
1.2.2 提高效能
JIT(即時編譯)器在應用程式運行時才會經行編譯,所以JIL確切知道程式運行在什麼類型的處理器上,就可以針對該處理器經行最佳化,從而提高效能。
1.2.3 語言互通性
Visual Basic 2013,Visual C++ 2013,Visual F#,COM和COM+,Windows運行庫。
1.3 中繼語言
中繼語言的主要特性:
IL一般不允許對模糊資料類型執行任何操作,儘管強迫型別安全似乎會降低效能,但多數情況下我們從.NET提供的、依賴於型別安全的服務中擷取的好處更多,這些服務包括:
語言的互通性
實值型別(vaule type),變數直接儲存其資料,中繼語言儲存在堆棧中(如果在參考型別中聲明為欄位,它們就內聯儲存在堆中)。
參考型別(reference type),變數僅儲存地址,參考型別的執行個體總是儲存在一個名為“託管堆”的記憶體地區中。
強制類型化
語言互通性的真正含義使用一種語言編寫的類應該能直接與用另一種語言編寫的類通訊。(由Visual Studio IDE)提供了這樣的工具(不是CLR)。
物件導向和使用介面
實值型別和參考型別之間的顯著差異。
語言互通性中強資料類型化的重要性
如果類派生或包含其他類的執行個體,它就需要知道其他類使用的所有資料類型,這就是語言互通性非常重要的原因。
.NET中的解決方案
CTS定義了可以在中繼語言中使用的預定義資料類型,所有面向.NET Framework的語言都可以產生最終基於這些類型的編譯代碼。
CTS還允許定義代碼自己的類型。
CTS的階層反映了中繼語言的單一性繼承的物件導向的方法。
Common Language Specification(CLS)
編寫非CLS將用代碼是可以接受的,但是這樣做之後我們就不能保證編譯好的IL代碼完全支援語言的互通性。