2019新的一年,祝大家新年快樂,工作生活一帆風順,心想事成!諸事大吉!
這篇文章是我今年的第一篇博客,主題是:C# .NET .NET Framework .NET CORE 等這些名詞之間有什么關聯關系。
費話不多說,直接進入主題。
.NET的正式誕生:2002年2月13日微軟正式推出.NET的開發工具--Visual Studio.NET 2002。
.NET平台結構圖:
我們看上圖,我們一一來做解釋:
硬件設備和操作系統我就不做解釋了,這是軟件運行的載體或環境,計算機行業的基礎。
.NET Framework(以下簡稱.NET 框架):
.NET Framework是安裝和運行在操作系統上的,是.NET最基礎的框架,開發.NET應用程序的核心基礎。
它提供了創建、部署和運行.NET應用的環境,主要包含三個關鍵的組成元素:
- CLR:公共語言運行時(Common Language Runtime)
- FCL:框架類庫(.NET Framework Class Library)
- DLR:動態語言運行時(Dynamic Language Runtime)
基於.NET框架可以支持多種語言進行開發,如 C#,VB.NET,C++等,也就是我們俗稱的跨語言開發
開發和運行一個.NET 應用程序必須安裝.NETFramework。
結構圖:
……
CLR:公共語言運行時
CLR是.NET框架的基礎,它提供了所有.NET應用程序運行時環境,是所有.NET應用程序都要使用的編程基礎。
CLR也可以看作是一個在執行時管理代碼的代理,管理代碼是CLR的基本功能,能夠被托管的代碼稱為托管代碼,
反之稱為非托管代碼。托管代碼以“CLR”為目標,非托管代碼以“操作系統”為目標
CLR包含三個組成部分:
CLS:公共語言規范(Common Language Specifcation):
是一種最低的語言標准,它制定了一種以.NET平台為目標的語言所必須支持的最小特征,以及該語言與其它.NET語言之間實現互操作所需要的完整特性。
凡是遵守這個標准的語言在.NET框架下都可以實現互相調用。簡單說:就是把各種語言轉換成統一的語法規范。
CTS:通用類型系統(Common Type System)
解決不同語言數據類型不同的問題,如C#中的整形是int,而VB.net中的整形是Integer,通過CTS我們把它們兩個編譯成通用的類型Int32。
所有的.NET語言共享這一類型系統,在它們之間實現對接,簡單說:就是把各種語言中的不同數據類型,轉換成統一的通用的數據類型。
JIT:即時編譯器(Just In Time)
將用於轉換之后的微軟中間語言編譯為二進制語言,交給CPU執行
CLR的編譯過程:
.NET所有編寫的源代碼都不被編譯成本地代碼,而是由各自語言的編譯器,編譯成微軟的中間代碼(Microsoft Intermediate Language,MSIL).
中間語言MSIL或IL,再由JIT編譯器轉換成機器代碼(操作系統專用代碼)
注:
IL我們通常稱之為程序集語言,因為.NET程序集需要由.NET運行時加載才能運行,所以IL代碼也叫做托管代碼(Managed Code),
它是一種比高級語言低,比機器語言要高的中間語言,基於堆棧,又支持面向對象。
FCL:框架類庫:
- 最底層,由BCL的大部分組成,主要作用是對.NET框架、.NET運行時及CIL語言本身進行支持,例如基元類型、集合類型、線程處理、應用程序域、運行時、安全性、互操作等。
- 中間層,包含了對操作系統功能的封裝,例如文件系統、網絡連接、圖形圖像、XML操作等。
- 最高層,包含各種類型的應用程序,例如Windows Forms、Asp.NET、WPF、WCF、WF等。
FCL的內容被組織成一個樹狀的命名空間(Namespace Tree),每個命名空間可以包含許多類型及其它命名空間,
在使用FCL時,我們需要引入其相應的命名空間。
核心命名空間簡介:
System:此命名空間包含所有其他的命名空用,在 System命名空間中包含了定義NET中使用的公共數據類美型,如 Boolean,
DateTime和lnt 32等。此命名空間中還有一個非常重要的數據類型" Object", Object類是所有其他NET對象繼承的基本類
System Collections. Generic:支持泛型操作,是.NET 2.0新增的內容.
System IO:支持對文件的操作、如復制,粘貼、刪除及對文件的讀寫等
System.Net:支持對網絡協議的編程
System.Dat提供對表示 ADO. NET結構的類的訪問
System.Windows. Fonns:用於開發 Windows應用程序,引入這個命名空間才能使用 Win forms的控件和各種特性。
System.Drawing:支持GDI+基本圖形操作
DLR:動態語言運行時
在NET Framework 4.0中新增了動態語言運行時DLR(Dynamic Language Runtime),相對於CLR微軟提供了DLR
用來向CLR中添加了一組專門用於滿足動態語言的服務, 借助於DLR,可以開發在.NET Framework 上運行的動態語言,
而且可以使用C#,VB.NET等語言方便地與動態語言交互,目前比較出名的DLR應用有IronPython。
.NET Framework的版本跌代:
該框架在version 6之后從.NET Framework分離出來。
7、Parallel linq
簡稱並行 LINQ (PLINQ) 是 LINQ to Objects 的並行實現。
PLINQ 將 LINQ 語法的簡潔和可靠性與並行編程的強大功能結合在一起。 就像面向任務並行庫的代碼一樣,PLINQ 查詢會根據主計算機的能力按比例調整並發程度。
在許多情況下,PLINQ 可通過更有效地使用主計算機上的所有可用內核來顯著提高 LINQ to Objects 查詢的速度。 這一性能提升使桌面具備高性能計算能力。
8、Task parallel library
簡稱任務並行庫 (TPL) 是 System.Threading 和 System.Threading.Tasks 空間中的一組公共類型和 API。
TPL 的目的是通過簡化將並行和並發添加到應用程序的過程來提高開發人員的工作效率。
TPL 動態縮放並發的程度以最有效地使用所有可用的處理器。 此外,TPL 還處理工作分區、ThreadPool 上的線程調度、取消支持、狀態管理以及其他低級別的細節操作。
通過使用 TPL,你可以在將精力集中於程序要完成的工作,同時最大程度地提高代碼的性能。
9、Modern UI Runtime
簡稱Modern UI,是一個專注於用戶界面設計的框架
10、Task-Based Async Model:基於任務的異步模型
最新版的.Net Framework 4.7主要帶來了以下方面的提升:
- 為Win10窗體應用帶來了高DPI支持;
- 為Win10上的WPF程序帶來了觸控支持;
- 增強了加密支持;
- 提升性能和穩定性。
介紹完.NET Framework,再來說說.NET平台最新發布的.NET Core。
結構圖如下: