C#和.NET 框架

 

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

大大改進的編程環境
  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#
相關文章
相關標籤/搜索