1. 程式人生 > >《Inside C#》筆記(一) .NET平臺

《Inside C#》筆記(一) .NET平臺

學習資料 framework 操作性 nbsp 數據庫操作 tom 不同 med out

C# 基於.NET運行時,所以有必要首先對.NET以及C#與.NET平臺的關系有一定的了解。

一 .NET平臺

.NET背後的基本思想是將原本獨立工作的設備、網絡服務整合在一個統一的平臺上,從而可以為用戶提供豐富全面的解決方案。平時提到.Net一般默認指的是.Net Framework,但其實這只是.NET平臺的一部分另外還包括.NET Building Block Service、.NET Device Software等一系列看不懂的東西。.Net Framework包含公共語言運行時Common Language Runtime(CLR)和.Net Framework類庫兩部分。可以把公共語言運行時理解成.NET平臺的虛擬機,另外所有的.NET語言都包含了.Net Framework類庫。這個類庫涵蓋了從文件讀寫到數據庫操作再到XML、SOAP等等非常廣泛的功能。


二 .NET Framework

a) CLR

CLR是.NET的核心,它是一個支持多種語言的程序同時運行、互相配合的實時環境。CLR支持多語言(C#, VB.NET,F#等)之間的互操作,那麽它是怎麽做到這一點的呢——因為這些語言都遵循了公共語言規範Common Language Specification(CLS)。一門語言只有遵守了CLS規範,才能創建運行在CLR上的應用程序。

關於CLR還有另一個重要的概念:托管代碼。托管代碼是在CLR的保護和管理下運行的代碼,由CLR負責托管代碼的內存分配、任務調度以及托管代碼之間的通訊,這可以保證每個應用程序(即使是使用不同的語言編寫的)都能夠遵循統一的行為規範。

b) .Net Framework類庫

.Net Framework類庫對保證多語言間的互操作性具有重要意義。因為通過.Net Framework類庫開發者能使用由CLR提供的統一接口。雖然其它許多語言都有自己的類庫,比如C++,但.Net平臺特殊的地方在於,編程語言之間的區別僅僅在於調用.Net Framework類庫時,在語義上的區別。下面來對比C++和C#對“Hello, World”程序的實現:

C++:

技術分享

C#版:

技術分享

C++可以使用cout函數直接輸出“Hello, World”,但C#要使用類庫提供的WriteLine方法。C++本身包含一個負責字符處理、文件讀寫、屏幕顯示等的類庫,這可以認為是C++語言本身的功能,但C#等.NET平臺下的語言卻不具備這些功能,這些功能屬於類庫,離開類庫,C#之類的語言基本上做不了任何事情。

c) IL碼和JITters

.NET平臺的語言編譯器會將源碼編譯成IL碼Microsoft Intermediate Language(MSIL), IL碼本身也可以說是一種編程語言。在編譯好的應用程序第一次被執行時,IL碼才被編譯成真正的機器碼。大概過程如下

1. 用C#編寫源碼

2. 使用C#編譯器(csc.exe)編譯成IL碼

3. 在編譯好的應用程序被執行時,會使用實時編譯器Just-In-Time Compiler(JITter)將IL碼轉換為機器碼。

JITter只在某個方法被調用時才編譯該方法,而且編譯好的機器碼會被緩存起來,只有C#源碼發生變化時才重新編譯機器碼。


.NET類庫的主要結構

技術分享

學習資料:Inside C# by Tom Archer

《Inside C#》筆記(一) .NET平臺