1. 程式人生 > >C#和.NET 框架

C#和.NET 框架

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框架使用的一個大類庫

大大改進的編程環境
  1. 面向對象
  2. 自動垃圾回收
    CLR有GC(Garbage Collector,垃圾收集器),為你自動管理內存。(自動從內存中刪除程序不再訪問的對象)
  3. 互操作性
    • .NET語言允許不同.NET語言編寫的軟件模塊無縫交互
      • 一種.NET語言寫的程序可以使用甚至繼承用另一種.NET語言寫得類,只需遵循一定規則
      • 因為能容易的集成不同編程語言生成的模塊,.NET框架有時被稱為語言無關
    • .NET提供平臺調用(platform invoke,P/Invoke):允許.NET代碼調用並使用非.NET代碼。它可以使用標準Win32 DLL導出的純C函數代碼,比如Windows API
    • .NET框架允許與COM互操作:.NET框架組件能調用COM組件,COM組件也能調用.NET組件。
  4. 不需要COM
    擺脫了COM也就能擺脫下面這些東西,但系統中依然使用很多COM組件,所以偶爾還需要編寫代碼與這些組件交互,這將在25章討論
    • IUnknown接口
    • 類型庫
    • 手動引用計數
    • HRESULT
    • 註冊表
  5. 簡化的部署
    • .NET程序無需註冊表,意味著最簡單情形下,復制過去就能用。
    • .NET提供並行執行的特性,允許一個DLL的不同版本在同一機器上存在。即每個程序都可訪問程序生成時使用的版本DLL
  6. 類型安全性
    CLR檢查並確保參數及其它數據對象的類型安全,不同編程語言編寫的組件間也無問題
  7. 基類庫
    .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的重要組成部分

  1. 公共類型系統
    CTS(Common Type System,公共類型系統)定義了在托管代碼中一定會使用的類型特征。
    • 定義了一組豐富的內置類型,以及每種類型固有的、獨有的特性
    • .NET兼容編程語言的類型通常映射到CTS中已定義內置類型集的某一特殊子集
    • CTS的所有類型都繼承自公共基類-object
    • 使用CTS可確保系統類型和用戶定義類型能被任何.NET語言兼容使用
  2. 公共語言規範
    CLS(Common Language Specification,公共語言規範)詳細說明了一個.NET兼容編程語言的規則、屬性、行為,其主題包括數據類型、類結構、參數傳遞。

各種縮寫


技術分享圖片

技術分享圖片

C#的演化


版本焦點特性章節
5.0 異步 20
4.0 命名參數和可選參數 5
3.0 LINQ 19
2.0 泛型 17
1.0 C#

C#和.NET 框架