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

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上的應用程序。ide

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

 

b) .Net Framework類庫學習

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

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

相關文章
相關標籤/搜索