標籤:編譯 分享圖片 傳遞 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架構使用的一個大類庫
大大改進的編程環境
- 物件導向
- 自動記憶體回收
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就在它運行時管理它,執行釋放無主記憶體、檢查數組邊界、檢查參數類型、管理異常等任務。同時兩個術語由此而生
- 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的重要組成部分
- 公用類型系統
CTS(Common Type System,公用類型系統)定義了在Managed 程式碼中一定會使用的類型特徵。
- 定義了一組豐富的內建類型,以及每種類型固有的、專屬的特性
- .NET相容程式設計語言的類型通常映射到CTS中已定義內建類型集的某一特殊子集
- CTS的所有類型都繼承自公用基類-object
- 使用CTS可確保系統類別型和使用者定義型別能被任何.NET語言相容使用
- 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架構