初读CLR Via C# 之 IL、CTS、CLS
本章將對CLR中的IL、CTS和CLS進行一個大概的總結(jié)。下章將開始第二章的內(nèi)容。
IL我們稱之為高級匯編語言或者中間語言,在我們編寫基于.NET框架下的程序(不論是C#、VB或者J#等)在被編譯成本地CPU指令前,都將被編譯成IL語言,再有CLR對IL語言進行編譯和控制。比如用VB在控制臺應用程序?qū)懭肴缦麓a:
??? Sub Main()
??????? Console.WriteLine("VB")
?End Sub
再用C#在控制臺應用程序?qū)懭肴缦麓a:
static void Main(string[] args)
{
?? ?? ?Console.WriteLine("Test");
}
雖然語法完全不一樣(除了輸出比較相似外),但是如果我們用微軟的MSIL反匯編程序加載編譯完成后的exe文件,如圖:
?
?
?
圖1.1
?
????? 圖1.2
?
上面兩張圖中圖1.1為編譯完成后VB語言的代碼,圖1.2為編譯完成后C#的代碼,在我畫紅線的地方大家可以看出,出了第一行(紅線)不一樣為我們輸出的字符串外,第二行(紅線)是完全一樣,也就是說不管在平臺下什么語言進行編程,編譯器最終都會把它編譯成統(tǒng)一的IL代碼(相同功能,比如示例中的控制臺輸出指令)。通過上面的示例可以很容易的看出CLR是如何支持多語言集成的,只是需要不同的編譯器,把源文件編譯成面向CLR的IL代碼,就可以在.NET框架下面運行。
什么是CTS?
CTS(Common Type System 通用類型系統(tǒng))是由微軟制定的一個規(guī)范,它表述了一個類型的定義和行為。既然CTS是一組規(guī)范,那么都規(guī)定了什么呢?
一、CTS規(guī)定一個類型可以包含零個或多個成員(字段、屬性、方法、事件);
二、CTS規(guī)定了一個類型的可視原則。就是我們所說的權(quán)限修飾符(public、private、protected、internal)
三、CTS規(guī)定任何類型都只能從一個類型中派生,即:System.Object類型。(雖然C++支持多集成,但是在.NET框架下,如果編譯器發(fā)現(xiàn)開發(fā)人員使用了多集成,違反了CTS的這一規(guī)定,編譯器就會報錯。)
什么是CLS?
? CLS(Common Language Specification 公共語言規(guī)范)是由微軟制定的一個各個語言間都支持的功能。也就是說,CLS是CTS的一個子集,而這個子集是.NET框架下面所有編程語言都必須遵守的(如果需要C#和VC++的應用程序進行通信)。說的更詳細一點就是說,如果你想用C#調(diào)用C++的組件,那么C++所使用的語法(如果該方法為public,如果方法不為public的話,CLS不進行約束),必須保證C#能夠操作??墒?span lang="en-us">C++程序員不一定知道C#能不能操作他所寫的方法,這個時候就需要CLS進行約束,以保證C#能正常的調(diào)用C++的組件。
?
圖1.3
?
圖1.3中大家可以看出,CLR\CTS為.NET框架下的所有語言提供了一個大的功能集。每一個語言都使用了CLR\CTS的一個子集。但是這個子集中都包含了CLS這個最小的子集。也就是說所有語言的功能及都必須支持CLS最小的供能集。
???? 到此這本書的第一章筆者只領悟到這些東西,可能還有更深層次的東西,由于筆者的水平有限,也只能到這里了。如有不對的地方、不準確的地方,希望各位看官都能即時的提出。以便筆者學習和糾正博文中的錯誤,謝謝!
???
轉(zhuǎn)載于:https://www.cnblogs.com/BreatheLee/archive/2011/09/15/2177400.html
總結(jié)
以上是生活随笔為你收集整理的初读CLR Via C# 之 IL、CTS、CLS的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到家人怀孕了是什么预兆
- 下一篇: 做梦梦到大蟒蛇是什么意思周公解梦