C#和.NET框架
在.NET以前
20世紀90年代,微軟平臺多數程序員使用VB、C或C++。他們使用的技術都有問題。html
技術 |
問題 |
純Win32 API |
不是面向對象,工做量比MFC大 |
MFC(Microsoft Foundation Class,微軟基礎類庫) |
雖是面向對象,可是不一致,且過於陳舊 |
COM(Component Object Model,組件對象模型) |
雖然概念簡單,但實際代碼複雜醜陋 |
通病 |
以上技術都針對桌面程序開發,與Web編程截然不同 |
由此引出下一代平臺的目標程序員
.NET時代
.Net框架特色編程
- 多平臺
- 採用行業標準的通訊協議
- 提供更安全的執行環境
.NET框架的組成
CLR(Common Language Runtime,公共語言運行庫)數組
- 內存管理和垃圾回收
- 代碼安全驗證
- 代碼執行、線程管理及異常處理
編程工具涵蓋編碼和調試所需一切安全
- Visual Studio IDE
- .Net兼容編譯器
- 調試器
- 網站開發服務器端技術,好比ASP.NET或WCF
BCL(Base Class Library,基類庫):.NET框架使用的一個大類庫服務器
大大改進的編程環境
- 面向對象
- 自動垃圾回收
CLR有GC(Garbage Collector,垃圾收集器),爲你自動管理內存。(自動從內存中刪除程序再也不訪問的對象)
- 互操做性
- .NET語言容許不一樣.NET語言編寫的軟件模塊無縫交互
- 一種.NET語言寫的程序可使用甚至繼承用另外一種.NET語言寫得類,只需遵循必定規則
- 由於能容易的集成不一樣編程語言生成的模塊,.NET框架有時被稱爲語言無關
- .NET提供平臺調用(platform invoke,P/Invoke):容許.NET代碼調用並使用非.NET代碼。它可使用標準Win32 DLL導出的純C函數代碼,好比Windows API
- .NET框架容許與COM互操做:.NET框架組件能調用COM組件,COM組件也能調用.NET組件。
- 不須要COM
擺脫了COM也就能擺脫下面這些東西,但系統中依然使用不少COM組件,因此偶爾還須要編寫代碼與這些組件交互,這將在25章討論
- IUnknown接口
- 類型庫
- 手動引用計數
- HRESULT
- 註冊表
- 簡化的部署
- .NET程序無需註冊表,意味着最簡單情形下,複製過去就能用。
- .NET提供並行執行的特性,容許一個DLL的不一樣版本在同一機器上存在。即每一個程序均可訪問程序生成時使用的版本DLL
- 類型安全性
CLR檢查並確保參數及其它數據對象的類型安全,不一樣編程語言編寫的組件間也無問題
- 基類庫
.NET框架提供一個龐大的基礎類庫(Base Class Library,BCL)。在寫程序時可使用其中的類
- 通用基礎類 : 一組強大的工具,好比文件操做、字符串操做、安全和加密。
- 集合類 : 列表、字典、散列表及位數組
- 線程和同步類 : 用於建立多線程程序
- XML類 : 用於建立、讀取及操做XML文檔
編譯成CIL
- 程序集要麼可執行,要麼是DLL
- 程序集的代碼不是本機代碼,而是一種名爲CIL(Common Intermediate Laguage,公共中間語言)的中間語言
- 程序集包含如下內容
- 程序的CIL
- 程序中使用的類型的元數據
- 對其它程序集引用的元數據
CIL又叫IL(Intermediate Language)或MSIL(Microsoft Intermediate Language)多線程
編譯成本機代碼並執行
程序的CIL直到被調用纔會被編譯成本機代碼。運行時,CLR執行下面的步驟框架
- 檢查程序集安全特性
- 在內存中分配空間
- 把程序集中可執行代碼發送給實時(Just-in-Time,JIT)編譯器,把其中一部分編譯成本機代碼
一旦CIL被編譯成本機代碼,CLR就在它運行時管理它,執行釋放無主內存、檢查數組邊界、檢查參數類型、管理異常等任務。同時兩個術語由此而生異步
- 託管代碼:爲.NET框架編寫的代碼,須要CLR
- 非託管代碼:不在CLR控制下運行的代碼,好比Win32 C/C++ DLL
編譯和執行
CLR Common Language Runtime
CLR 在操做系統的頂層,負責管理程序執行
還提供下列服務編程語言
- 自動垃圾收集
- 安全和認證
- 經過訪問BCL(Base Class Livrary,基類庫)獲得普遍的編程功能,包括如Web服務和數據服務之類的功能
CLI Common Language Infrastructure
過去因爲語言和平臺的不一樣,編程語言的內置類型各不相同。
例如,組成整數的位數對應不一樣語言和平臺就有很大差異。
爲了統一協做,必須有一組標準,這就是CLI(Common Language Infrastructure,公共語言基礎結構)
CLI的重要組成部分
- 公共類型系統
CTS(Common Type System,公共類型系統)定義了在託管代碼中必定會使用的類型特徵。
- 定義了一組豐富的內置類型,以及每種類型固有的、獨有的特性
- .NET兼容編程語言的類型一般映射到CTS中已定義內置類型集的某一特殊子集
- CTS的全部類型都繼承自公共基類-object
- 使用CTS可確保系統類型和用戶定義類型能被任何.NET語言兼容使用
- 公共語言規範
CLS(Common Language Specification,公共語言規範)詳細說明了一個.NET兼容編程語言的規則、屬性、行爲,其主題包括數據類型、類結構、參數傳遞。
各類縮寫
C#的演化
版本 |
焦點特性 |
章節 |
5.0 |
異步 |
20 |
4.0 |
命名參數和可選參數 |
5 |
3.0 |
LINQ |
19 |
2.0 |
泛型 |
17 |
1.0 |
C# |