·來源于唐老獅的視頻教學,僅作記錄和感悟記錄,方便日后復習或者查找
一.什么是.Net
.Net是指微軟一整套技術體系的統稱與代號
包含的內容有:
- 框架體系:.Net Frameword,?.Net Core,?Mono
- 開發語言:C#,VB,F#等(其中C#是主推的主流語言)
- 開發工具:VS,VScode等
做這一套體系的目的:
- ①實現跨語言:只要是面向.Net平臺的編程語言(C#,F#,C++,VB)用其中一種語言編寫的程序可以無縫切換到另一個應用程序中
- ②實現跨平臺:只要一次編譯,就可以把應用程序不經代碼修改地運行在任意有.Net框架實現的操作系統上。(即代碼不依賴于操作系統和硬件設備)
(搞壟斷,希望大家都統一用他家的產品和開發工具與框架)
二..Net跨語言的實現
如何實現的跨語言:
- CLS(Common Language Specification):公共語言規范。參考每種語言的共性定義出的一套規則。只要開發者都遵守這個規則來進行編碼,那么代碼就能夠被任意.Net平臺支持的語言所通用,即可以通過不同的編程語言(C#,VB,J#等)來創建應用程序。【對于普通開發者】
- CTS(Common Type System):公共類型系統。設計面向.Net語言的時候要遵守的規范體系。CLS是CTS的子級。如果一個語言它支持CTS,那么它就是面向.Net平臺的語言。【對于要設計面向.Net的語言的開發者】
- CLI(Common Language Infrastructure):公共語言基礎。是微軟將CTS等內容提交給國際組織計算機制造聯合會ECMA的一個工業標準。
總結:
為了實現跨語言,微軟制定了上述的一些列規范。
只要語言遵守.Net的規范,那這個語言就可以和其他面向.Net的語言之間實現跨語言操作。即可以在.Net平臺下開發應用程序。
CLI包含CTS,是微軟把CTS提交給國際組織的一個工業標準
三..Net跨平臺的實現
我們可以看出來,.Net的跨語言實現是讓所有需要在.Net平臺上進行開發的語言遵守CLI標準。
不過在早期的.Net中其實是指支持Windows平臺的,也就是只能夠讓不同的語言共同去開發windows程序。而實現了的跨平臺功能就和.Net Frameword,.Net Core,以及Mono是有關的
1..Net Framework
定義:.Net Framework是一個開發框架。可以快速開發部署網站父物和應用程序。它是Windows中的一個組件。部分開源。主要用于開發Windows下的應用程序
包含:
- ①公共語言運行時(Common Language Runtime, CLR)
- ②虛擬執行系統
- ③.Net Framework類庫等
體系結構:
制作應用程序
基于CLS的開發語言 + 各種類庫 = 可以在CLR上編譯為機器碼的程序集
①只要支持CLS的語言都可以用于開發Windows下的應用程序
②BCL(基礎類庫)和FCL(框架類庫)是這個框架體系中為我們提供的各種API
③程序集的表現是.dll或者.exe格式的文件,其中最為關鍵的信息是:
- PE頭,CLR頭(就是一些程序的格式信息,比如入口方法,版本號等)
- CIL代碼(通用中間代碼):是介于源代碼和機器碼之間的代碼,可以通過CLR產生機器碼(總之就是會把所有不同語言經過轉化后得到的統一規范的中間代碼)
讓應用程序在操作系統上運行
CLR(Common Language Runtime):是公共語言運行時
- 它是.Net Framework的基礎,所有.Net技術都建立在此之上。
- 它提供內存管理,線程管理等服務。看起來和虛擬機一樣,因此又被稱為.Net虛擬機
因此如果想要應用程序能夠在目標操作系統上運行,就需要使用.Net提供的CLR環境來支持,即必須在操作系統上安裝.Net Framework
它會把程序集中的IL(中間代碼)翻譯成最終在操作系統上執行的機器碼
總結:
.Net Framework是一個能夠支持在Windows平臺下進行跨語言開發應用程序的的框架結構。它部分開源。但是它不支持跨平臺開發
2..Net Core
定義:.Net Core是2016年推出的.Net Framework的新一代版本。類似.Net Framework的兄弟
- 它是.Net Framework的翻版實現,是一個開源項目
- 它是基于.Net Framework來進行設計的主要目的就是跨平臺
- 它是.Net技術框架在Windows,Mac OS,類Linux系統下的具體實現
原理:給不同的操作系統都實現相應的CLR(.Net虛擬機)。這樣在不同平臺上就都可以通過CLR進行跨語言開發。同時又實現了跨平臺的特性
.Net Framework誕生于2002年,.Net Core誕生于2016年,中間14年的空窗期的跨平臺實現主要由Mono來負責
3..Mono
說明:Mono是一個Xamarin公司(已被微軟收購)贊助的開源項目。
- 它基于.Net的CLI(公共語言基礎)提供了對.Net Framework的另一種實現。
- 它和.Net Framework的區別是具備跨平臺能力【可以在Windows,Mac OS, Linux操作系統,PS3,XBOX,Wii等主機平臺上運行】
- 它1.0版本出現于2004年
原理:
①利用.Net平臺制定的CLI把很多語言編譯成通用規范的CIL公共中間語言
②再利用CLR公共語言運行時轉化為對應操作系統的原生代碼
(這套規則是在.Net Framework的基礎上進行的修改與添加)
老實說它這個原理和.Net Core看起來很像的
四.總結
①.Net是微軟旗下一系列開發框架,開發語言,開發工具的產品代號。
②對于跨語言的實現,主要通過讓語言遵守CLI標準,即可讓該語言成為面向.Net的語言。從而使得該語言開發的應用程序能夠被編譯為統一規范標準的通用中間語言CIL。并通過CLR通用語言運行時(.Net虛擬機)去把CIL轉化為操作系統可執行的機器碼(典型的是.Net Framework框架把CIL轉化為Windows操作系統下的可執行機器碼)
③對于跨平臺的實現,主要是通過.Net Core和Mono這兩個完全開源的框架實現的。
④.Net Core是.Net Famework的翻版實現,它最大的特點是在不同的平臺上實現了對應的CLR(.NET 虛擬機)從而讓應用程序能夠在不同平臺上被編譯執行
⑤Mono是一個很早(2004年)的開源項目,是對.Net Framework的修改與添加,它是通過利用CLI對.Net Framework進行了另一種實現的框架。它利用CLI把不同語言編譯成統一規范的CIL,然后再利用CLR轉化為對應操作系統上可執行的機器碼
⑥Mono 使用??同一套運行時代碼??,.NET Core 為每個目標平臺(Windows、Linux、macOS)??獨立實現了一套完整的運行時(CoreCLR)