C#和.NET 框架
阿新 • • 發佈:2018-04-05
lib 調試器 網站開發 但是 集合類 img 程序 其中 主題
C#和.NET框架
在.NET之前
20世紀90年代,微軟平臺多數程序員使用VB、C或C++。他們使用的技術都有問題。
技術 | 問題 |
---|---|
純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組件。
- .NET語言允許不同.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# | |
C#和.NET 框架