第1章 C# 和 .NET 框架
1.1 在 .NET 之前
C#為在.NET框架上開發程序而設計的編程語言。
MFC(Microsoft Foundation Class,微軟基礎類庫)
微軟公司提供的一個類庫,以 C++ 類的形式封裝了 Windows 的 API,并包含一個應用程序框架,以減少應用程序開發人員的工作量。其中包含的類包含大量 Windows 句柄封裝類和很多 Windows 的內建控件和組件的封裝類。
COM(Component Object Model,組件對象模型)
基于 Windows 平臺的一套組件對象接口標準,由一組構造規范和組件對象庫組成。組件對象不使用方法而用接口來描述自身。
1.2 .NET 時代
.NET 框架是一種面向對象的環境,主要特點:
- 多平臺:可以在各種計算機上運行。
- 行業標準:使用行業標準的通信協議,如 XML、HTTP、SOAP、JSON 和 WSDL。
- 安全性:提供安全的執行環境,即使有來源可疑的代碼存在。
1.2.1 .NET框架組成
.NET框架由三部分組成:CLR(Common Language Runtime,公共語言運行庫)、BCL(Base Class Library,基類庫)、編程工具。
CLR在運行時管理程序的執行,主要內容有
- 內存管理和垃圾收集;
- 代碼安全驗證;
- 代碼執行、線程管理及異常處理。
BCL(Base Class Library,基類庫)是 .NET 框架使用的一個大類庫,可以在程序中使用。
編程工具包括編碼和調試需要的一切,主要包括:
-
集成開發環境 IDE
-
.NET兼容的編譯器
-
調試器
-
Web開發服務器端技術
1.2.2 大大改進的編程環境
.NET主要特點及好處
1.面向對象的開發環境
CLR、BCL 和 C# 完全面向對象,形成良好的集成環境。
系統為本地程序和分布式系統都提供了一直的、面向對象的編程模型。
2.自動垃圾收集
GC(Garbage Collector,垃圾收集器)自動管理內存,自動刪除程序不再訪問的對象。
3.互操作性
-
允許不同的 .NET 語言編寫的軟件模塊無縫交互。
只要遵循一定的規則,.NET 語言的程序可以相互使用其他 .NET 語言寫的類;
能夠很容易集成不同編程語言生成的模塊,.NET 框架也被稱為“語言無關”。 -
提供平臺調用特性(Platform Invoke,P/Invoke),允許 .NET 代碼調用非 .NET 代碼。
.NET 框架能與 COM 組件相互調用。
4.不需要COM
擺脫了COM的束縛
5.簡化的部署
不需要使用注冊表注冊。
提供并行執行的特性,允許 DLL 不同版本在同一臺機器上存在。
6.類型安全性
CLR 檢查并確保參數及其他數據對象的類型安全。
7.基類庫
.NET 框架提供龐大的基礎類庫(BCL),有時也稱為 FCL(Framework Class Library,框架類庫)。
主要包括:
通用基礎類
集合類
線程和同步類 - 用于創建多線程程序
XML類 - 用于創建、讀寫XML文檔
1.3 編譯成 CIL
.NET 語言的編譯器接受源代碼文件,生成名為程序集的輸出文件
程序集里的代碼,不是本機代碼,而是CIL(Common Intermediate Language,公共中間語言)的中間語言。
程序集 主要包含:
程序的 CIL;
程序中使用的類型的元數據;
對其他程序集引用的元數據。
1.4 編譯成本機代碼并執行
程序集的 CIL 直到被調用運行時才會被編譯成本機代碼,運行時執行的步驟:
1.檢查程序集的安全特性;
2.在內存中分配空間;
3.把程序集中的可執行代碼發送給 JIT(Just-In-Time,即時編譯器),把其中一部分內容編譯為本機代碼。
程序集中的可執行代碼只在需要的時候由 JIT 編譯,之后被緩存起來供后續使用。不被調用的代碼不會被編譯為本機代碼,被調用的代碼只會被編譯一次。
一旦 CIL 被編譯為本機代碼,CLR 就在運行時對它進行管理,如釋放無主內存、檢查數組邊界、檢查參數類型和管理異常等。
托管代碼:由 .NET 框架編寫的代碼,需要 CLR。
非托管代碼:不在 CLR 控制之下運行的代碼,如 C/C++、DLL。
編譯和執行過程
源文件 → 編譯器 → 程序集 → JIT編譯器 → 本機代碼 → 操作系統
1.5 CLR
CLR 是 .NET 框架的核心組件,位于操作系統的頂層,負責管理程序的執行、自動垃圾收集、安全和認證
1.6 CLI
CLI(Common Language Infrastructure,公共語言基礎結構)
一組 .NET 標準,將 .NET 框架的所有組件連接成一個內聚、一致的系統,詳細說明了所有軟件都必須遵守的規則和約定
主要組成部分:
1.CTS(Common Type System,公共類型系統)
定義了在托管代碼中一定會使用的類型的特征,如
定義了一組豐富的內置類型,及每種類型固有、獨有的特性;
.NET 兼容編程語言提供的類型,通常映射到 CTS 中已定義的內置類型集的某一個特殊子集;
所有類型都繼承 Object;
可以確保系統類型和用戶定義類型能被任何 .NET 兼容的語言所使用。
2.CLS(Common Language Specification,公共語言規范)
詳細說明了 .NET 兼容編程語言的規則、屬性和行為,包括數據類型、類結構和參數傳遞。
1.7 各種縮寫
Common Intermediate Language, CIL 公共中間語言
Common Language Infrastructure, CLI 公共語言基礎結構
Common Type System, CTS 公共類型系統
Common Language Standard, CLS 公共語言規范
Common Language RunTime CLR 公共語言運行庫
Garbage Collect,GC 垃圾收集器
Just-In-Time JIT 即時編譯器
Base Class Library BCL 基類庫
1.8 C# 的演化
C#最新版本 13.0,本書中 對應版本是7.0
1.9 C# 和 Windows 的演化
C#是一門優雅的語言