香蕉视频app

Keep on going never give up.

Let's Go

C# 學習筆記(1)C#中的一些基礎概念

C#Lonely2019-04-23 00:00:0074次2條

C#中的一些基本概念,實際上我也不是理解的很透徹,很多時候只會去用,讓我說出其中的所以然來我也回答不上來,可能是因為自己的基礎知識比較薄弱吧,沒有深入的理解吃透它們。先記錄下來,以后可以在回頭看看。

1、什么是C#?

C#是一門面向對象的編程語言香蕉视频app,發音為C Sharp,是由微軟公司開發的一種面向對象且運行于.NET Framework之上的高級程序設計語言。


2、什么是.NET Framework?

.NET Framework(.NET框架):C#是一門編程語言,它運用于實現與計算機對話,但C#編寫的程序是需要編譯運行的,.NET Framework就是應用程序運行時的執行環境,為程序的運行提供一下幾種服務:

● 全面的類庫:.NET Framework提供了豐富的類庫以供調用,這樣我們不必再去編寫大量代碼去出處理常見的操作。

● 內存管理:在許多其他的編程語言中,開發人員需要負責內存的分配與釋放,以及對象生命周期的處理等任務。.NET Framework為減輕開發人員的工作,提供了內存管理服務。

● 通用類型系統 (Common Type System,CTS)CTS定義了可以在中間語言中使用的預定義數據類型。

● 開發結構和技術:.NET Framework提供了開發特定應用程序所需的庫,如Web應用程序的ASP.NET技術。

● 語言的操作性:面向.NET Framework的語言編譯器都提供了生成中間語言代碼的機制,這種機制使不同語言之間進行互操作成為可能。


3、.NET Framework的組成

.NET Framework由公共語言運行時(Common Language Runtime,CLR)和.NET Framework類庫(Framework Class Library,FCL)兩部分組成。

公共語言運行時:
公共語言運行時是.NET Framework的核心基礎。我們可以將CLR看成一個在執行時管理代碼的代理,它提供了內存管理、線程管理和異常處理等服務,而且還負責對代碼實施嚴格的類型安全檢查,保證了代碼的正確性。我們將受CLR管理的代碼稱為托管代碼( managed code), 將不受CLR管理的代碼稱為非托管代碼( unmanaged code )。
CLR包含兩個組成部分:通用類型系統( Common Type System, CTS)和公共語言規范( Common Language Specification, CLS)。

下面來具體了解這兩個組件的功能:
CTS :
C#和VB.NET都是由CLR進行管理的,但是它們的語法和數據類型各不相同,CLR是如何對這兩種不同的語言進行托管的呢?這得益于CTS。CTS用于解決不同語言之間數據類型不同的問題,如C#中整型是int,而VB.NET中的香蕉视频app型卻是Integer,通過CTS可以把這兩個類型變成通用類型Int32。所有.NET語言都共享CTS這一類型系統,從而使它們之間能夠實現無縫互操作。

CTS類型主要分為兩大類:引用類型和值類型。這兩種類型之間存在著相互轉化,轉化方法分別為裝箱(box )和拆箱( unbox)。
image.png

CLS

.NET下的語言不僅僅存在數據類型的不同,語言規范上也有顯著的區別,公共語言規范(CLS)就是為了解決這個問題而誕生的。CLS是種最低的語言標準,它制定了以.NET平臺為目標的語言所必須支持的最小特征,以及某一語言與其他.NET語言之間實現互操作所需要的完備特征。凡是遵守這個標準的語言,在.NET框架下都可以實現互相調用;不符合公共語言規范的代碼就不能被其他語言調用,繼而不能與其他語言進行互操作。比如在C#中,變量命名是區分大小寫的,而VB.NET卻不區分大小寫,這樣CLS就規定,編譯后的L代碼除了大小寫之外必須還有其他的不同。

兩者之間的區別:

png

.NET Framework類庫:

.NET Framework類庫就是一組DLL程序集的集合,其中包含了大量定義好的類型,這些類型都公開了一些功能。我們可以使用這些公開的功能開發出多種應用程序。由于FCL中包含了數量極多的類型,因此有必要將相關的一組類型放到一個單獨的命名空間中加以區分,例如System.IO命名空間中就包含了用于執行I/O操作的類型,因此在使用FCL中的某個類時,還必須知道該類所在的命名空間。


4、C#與.NET Framework的關系

C#是面向.NET Framework的語言,除C#之外,VB.NET和F#也都是面向.NET Framework的語言。.NET Framework為這些語言提供了執行環境,這些語言則可以調用.NET Framework所提供的類庫來開發各種應用程序。

image.png

5、C#代碼的執行過程

C#代碼的執行必須將其轉換為目標操作系統能夠理解的語言,即本機代碼(native code),在.NET Framework平臺下,該過程包括以下兩個階段:

● C#代碼編譯為中間語言代碼的階段——在編譯C#代碼時,并不是立即創建專用于操作系統的本機代碼,而是由C#編譯器(Visual Studio中集成了C#編譯器)把代碼編譯為通用中間語言(Common Intermediate Language,CIL)代碼。

● 中間語言代碼編譯為本機代碼階段——要使C#代碼能夠運行,還需進一步將CIL代碼轉為特定CPU的本機代碼,該過程由即時編譯器(Just-In-Time,JIT)來完成。

1、C#代碼編譯為中間語言代碼的階段

并不是只有C#代碼才能被編譯為中間語言代碼,其他面向.NET的語言(如VB.NET)在執行之前也都需要先編譯為中間代碼。該過程由對應的編譯器去完成。

png

最終創建的IL代碼將存儲在一個程序集中,程序集中除IL代碼外,還將包括元數據和可選的資源文件。元數據用來描述代碼中的類型,這種描述針對3個方面:類型定義的描述、類型成員的描述、資源引用成員的描述。可選的資源文件指IL代碼中使用的其他數據,如圖片文件等。

程序集分為兩種:擴展名為.exe的可執行文件,以及擴展名為.dll的可供其他程序調用的庫文件。

香蕉视频app 2、中間語言代碼編譯為本機階段

香蕉视频app 為了使IL代碼能夠運行,必須把它編譯為本機代碼,即CPU指令。這個過程由CLR的JIT編譯器來完成,其編譯過程如下:

png

香蕉视频app 3、執行本機代碼

香蕉视频app JIT編譯生成本機代碼之后,編譯好的本機代碼會被放置到一個緩沖區中緩存,下次再調用相同的代碼時,可直接運行緩沖區中現有的本機代碼,從而避免重新驗證IL代碼以及把它編譯為本機代碼的過程。使用這種方法,系統只會在首次調用時才會造成一些性能損失(即發生JIT編譯過程)。




暗錨,解決錨點偏移

文章評論

    嘿,來試試登錄吧!