是一套語言的規則定義
,就可以開發一套語言來符合
cts了
.假設你新開發的語言叫做
n#,它所實現的
cts非常有限
,僅實現了其中很少的一部分功能,它與
cts和
c#語言的關係可能如圖這樣:
那麼現在就有乙個問題:由c#
編寫的程式集
,能夠引用由
n#程式設計的程式集嗎
?肯定不能
,雖然c#和
n#同屬於
cts旗下
,但是它們並沒有共同之處
,因此雖然單獨的n#或
c#程式可以完美的在
.net
框架下執行
,但是它們之間卻無法相互引用
.如果使用
n#開發專案的開發者本來就不希望其它語言型別的專案來引用他的專案倒也罷了,但是
,如果n#專案期望其他語言型別的專案能夠對它進行引用
,就需要
n#中公開的型別和功能滿足
c#語言的特性
,即它們需要有共通之處.注意
,這句話中的有乙個詞很重要
,就是」公開的」(public).n#中不公開的部分
(private,internal,protected)
是不受影響的
,可以使用獨有的語言特性
,因為這些不公開的部分本來就不允許外部進行訪問
.因此,入股
n#想要被
c#所理解和引用
,它公開的部分就要滿足
c#的一些規範
,此時它與
cts和
c#語言的關係就變成這樣了:
如果世界上僅有兩種語言就好辦了,
把它們共同的語言特性提取出來
,然後要求所有公開的型別都滿足這些語言特性,這樣
c#和n#程式集就可以相互引用了
.可問題是
:語言型別有上百種,並且
.net
的設計目標是實現乙個開放的平台
,不僅現有的語言經過簡單的修改就能夠在
.net
框架上執行
,後續開發的新語言也可以
,而新語言此時並不存在
,如何提取它的語言特性
?因此又需要一套規範和標準來定義一些常見的
,大多數語言都共有的語言特性
.對於未來的新語言
,只要它公開的部分能夠滿足這些規範
,就能夠被其他語言的程式集所使用
.這個規範就叫做
cls(common language specification,
公共語言規範
).很明顯
,cls
是cts
的乙個子集
.現在引入了
cls,
關係圖就變了
如果利用c#
開發的乙個程式集的公開部分僅採用了
cls中的特性
,那麼這個程式集就較早
cls相容程式集.顯然
,對於上面提到的
fcl框架類庫
,其中的型別都符合
cls,
僅有極個別型別的成員不符合
cls,
這就保證了所有面向
.net
的語言都可以使用框架類庫中的型別.
大家如果對啥叫」語言特性」感興趣的話,
我可以稍微說一下
,所謂的語言特性無非就是一些規定
:是否區分大小寫
,識別符號的命名規則如何
,可以使用的基本型別有哪些
,建構函式的呼叫方式
(是否會呼叫基類建構函式
),支援的訪問修飾符等
. 那麼我們如何檢驗程式集是否符合cls
呢?.net
為我們提供了乙個特性
clscompliant,
便於在編譯時檢查程式集是否符合
cls.關於clscompliant的內容,應為樓主了解的不多,這裡不多說了.
七 公共語言規範 CLS
clr整合了很多種語言,並讓它們之間可以相互訪問,是因為clr建立的標準的型別集 元資料 公共執行環境。但由於各種語言間存在著極大的差別,如區分大小寫,有的不支援unsigned 操作符過載或者引數可變的方法,所以要想建立這種讓別的語言能訪問的程式,自己所用的程式語言只能使用其它語言都支援的那些特性...
CLR via C 1 3 載入公共語言執行時
原文 clr via c 1.3 載入公共語言執行時 1.你生成的每個程式集可以是exe,也可以是dll。最終都是有clr管理這些程式集中 的執行。2.vs2010中,建立新的exe專案時,預設平台是x86,而不是anycpu。3.windows的64位版本提供了乙個名為wow64 windows ...
CLR via C 1 3 載入公共語言執行時
1.你生成的每個程式集可以是exe,也可以是dll。最終都是有clr管理這些程式集中 的執行。2.vs2010中,建立新的exe專案時,預設平台是x86,而不是anycpu。3.windows的64位版本提供了乙個名為wow64 windows on windows64 的技術,允許允許32位的wi...