C# 圖解教程 第一章 C#和.NET架構

來源:互聯網
上載者:User

標籤:編譯   分享圖片   傳遞   specific   面向   計數   工具   程式   自動管理   

 C#和.NET架構在.NET之前
.NET時代.NET架構的組成
大大改進的編程環境編譯成CIL
編譯成機器碼並執行
CLR Common Language Runtime
CLI Common Language Infrastructure
各種縮寫
C#的演化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就在它運行時管理它,執行釋放無主記憶體、檢查數組邊界、檢查參數類型、管理異常等任務。同時兩個術語由此而生

  • Managed 程式碼:為.NET架構編寫的代碼,需要CLR
  • Unmanaged 程式碼:不在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,公用類型系統)定義了在Managed 程式碼中一定會使用的類型特徵。
    • 定義了一組豐富的內建類型,以及每種類型固有的、專屬的特性
    • .NET相容程式設計語言的類型通常映射到CTS中已定義內建類型集的某一特殊子集
    • CTS的所有類型都繼承自公用基類-object
    • 使用CTS可確保系統類別型和使用者定義型別能被任何.NET語言相容使用
  2. Common Language Specification 
    CLS(Common Language Specification,Common Language Specification)詳細說明了一個.NET相容程式設計語言的規則、屬性、行為,其主題包括資料類型、類結構、參數傳遞。
各種縮寫

C#的演化
版本 焦點特性 章節
5.0 非同步 20
4.0 具名引數和選擇性參數 5
3.0 LINQ 19
2.0 泛型 17
1.0 C#  

PS:最後附上本書PDF掃描版

C# 圖解教程 第一章 C#和.NET架構

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.