.NET 公用語言規范,可以保證C#組件與其他語言組件間的互操作性.
.NET Framework將CLS定義為一組規則,所有.NET語言都應該遵循此規則才能創建與其他語言可互操作的應用程序,但要注意的是為了使各語言可以互操作,只能使用CLS所列出的功能對象,這些功能統稱為與CLS兼容的功能。
例如:C#支持無符號數字類型,該特征能通過CTS的測試,但CLS卻僅僅識別符號數字類型。因此,如果用戶在一個組件中使用C#的無符號類型,就可能不能與不使用無符號類型的語言(如VB.NET)設計的.NET組件實現互操作。這里用的是“可能不”,而不是“不可能”,因為這一問題實際依賴于對non-CLS-compliant項的可見性。事實上,CLS規則只適用于或部分適用于那些與其他組件存在聯系的組件中的類型。實際上,用戶能夠安全實現含私有組件的項目,而該組件使用了用戶所選擇使用的.NET語言的全部功能,且無需遵守CLS的規范。另一方面,如果用戶需要.NET語言的互操作性,那么用戶的組件中的公共項必須完全符合CLS規范。
CLS公共語言規范
公共語言規范(Common Language Specification,CLS)和通用類型系統一起確保語言的互操作性。CLS是一個最低標準集,所有面向.NET的編譯器都必須支持它。因為IL是一種內涵非常豐富的語言,大多數編譯器的編寫人員有可能把給定的編譯器的功能限制為只支持IL和CLS提供的一部分特性。只要編譯器支持已在CLS重定義的內容,這就是很不錯的。
提示:編寫非CLS兼容代碼應該是完全可以接受的,只是在編寫了這種代碼后,就不能保證編譯好的IL代碼完全支持語言的互操作性。