本章內容:
編譯和運行面向 .NET的代碼
MSIL的優點
值類型和引用類型
數據類型化
理解錯誤處理和特性
程序集、.NET基類和命名空間
本章主要介紹一些概念,內容不多。
C#是專門為Microsoft的.NET Framework設計的一門語言,是一種面向對象方法的語言。
C#就其本身而言,只是一門語言,盡管它用於生成.net Framework的代碼,但它本身不是.net的一部分。.net支持的一些特性C#本不支持,反之一樣,如:C#支持運算符重載,.net是不支持的。
.NET Framework的核心是其運行庫執行環境,稱為公共語言運行庫(CLR)或.NET運行庫。通常將在CLR控制下運行的代碼稱為托管代碼(managed code)
編譯過程:
把源代碼編譯為MSIL(Microsoft Intermediate Language),Microsoft中間語言。
CLR把IL編譯為平台專用代碼
IL: 低級語言,語法簡單,可快速轉換為本地機器碼,區分大小寫,基於堆棧的語言。優點:平台無關、提高性能及語言的互操作性。
IL主要特征:
面向對象和使用接口
值類型和引用類型之間的顯著差異
強數據類型化
使用異常來處理錯誤
使用特性
CTS: 通用類型系統,通過類型,用一種編程語言寫的代碼能與用另一種語言寫的代碼溝通,CTS描述了類型的定義和行為。
CLS: 公共語言規范,和CTS一起確保語言的互操作性,是一個最低標准集。
GC: 垃圾回收器用來在.NET中進行內存管理,特別是它可以恢復正在運行的應用程序需要的內存。
應用程序域是.NET中的一個重要技術改進,是分離組件的一種方式,用於減少運行應用程序的系統開銷。
程序集:包含編譯好的,面向.NET Framework的代碼邏輯單元,可以存儲在多個文件中。
可執行代碼和庫代碼使用相同的程序集結構,唯一的區別是可執行的程序集包含一個主程序入口,而庫程序集不包含。
程序集的一個重要特性是它們包含的元數據描述了對應代碼中定義的類型和方法。程序集也包含描述程序集本身的元數據。
私有程序集是最簡單的一種程序集類型,一般附帶在某個軟件上,且只能用於該軟件。因為私有程序集完全是自包含的,所以部署它的過程就很簡單,只需把相應的文件放在文件系統對應文件夾中即可(不需要注冊表項),這個過程稱為“0影響(xcopy)安裝”。
共享程序集是其他應用程序可以使用的公共庫。因為其他軟件可以訪問共享程序集,所以需要采取一定的保護措施防止名稱沖突及版本覆蓋的風險。
解決辦法是把共享程序集放在文件系統的一個特定的子目錄樹中,稱為GAC(全局程序集緩存)。
為了避免名稱沖突,應根據私鑰加密法為共享程序集指定一個名稱(對於私有程序集,只需要指定與其主文件名相同的名稱即可),該名稱稱為強名,保證其唯一性,必須由要引用共享程序集的應用程序來引用。
與版本覆蓋風險相關的問題,可以通過在程序集清單中指定版本信息來解決,也可以通過同時安裝來解決。
程序集存儲了元數據,包括在程序集中定義的所有類型和這些類型的成員三細節,所以可以編程訪問這些數據,這個技術稱為反射。