七 公共語言規範 CLS

2022-01-30 22:23:27 字數 882 閱讀 4160

clr整合了很多種語言,並讓它們之間可以相互訪問,是因為clr建立的標準的型別集、元資料、公共執行環境。但由於各種語言間存在著極大的差別,如區分大小寫,有的不支援unsigned、操作符過載或者引數可變的方法,所以要想建立這種讓別的語言能訪問的程式,自己所用的程式語言只能使用其它語言都支援的那些特性。為了幫助我們更好的做到這一點,microsoft定義了乙個"公共語言規範(common language specification,cls)",如下圖

如果一種語言定義了乙個型別,並希望在另一種語言中使用該型別,就絕對不能在該型別的公共和受保護的成員中使用cls外部的任何特性。否則其它程式設計人員使用其它語言來編寫**時,就可能無法訪問該型別的成員。如以下**:

using system;

//告訴編譯器檢查cls相容的特性

[assembly: clscompliant(true)]

namespace somelibrary

//警告,僅大小寫不同不符合cls

public void abc()

//沒有錯誤,該方法是私有的

private uint32 abc()}}

這樣寫就會出現警告,因為它的公共的和受保護的成員不符合cls特性,要想獲得cls規則的乙個完整列表,請參見.net framework sdk文件的「跨語言互操作性(cross-language interoperability)」一節。

如上**要把類somelibrarytype的修飾符public去掉的話一切警告也就消失,因為這樣該類將使用預設修飾符internal,所以在程式集的外部不可見。順便提一下不能改成private或protected和protected internal,因為命名空間中定義的元素無法顯式宣告為 private、protected 或 protected internal。

CLS 公共語言規範

前面說過了關於cts 是一套語言的規則定義 就可以開發一套語言來符合 cts了 假設你新開發的語言叫做 n 它所實現的 cts非常有限 僅實現了其中很少的一部分功能,它與 cts和 c 語言的關係可能如圖這樣 那麼現在就有乙個問題 由c 編寫的程式集 能夠引用由 n 程式設計的程式集嗎 肯定不能 雖...

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...