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