.NET 執行環境具有語言獨立性,開發者可使用不同的 .NET 語言撰寫組件。為了讓其他開發者能以任意語言使用你的組件,你建立的組件必須符合共同語言規範(CLS)。
第一條規則很容易落實:在組件層級加上 [assembly: CLSCompliant(true)] 屬性,編譯器會強制整個組件符合 CLS 規範。若公用方法或屬性使用非 CLS 相容型別(如 UInt32),編譯器會報錯:
// 錯誤:回傳無號整數
public UInt32 Foo() { return _foo; }
// 錯誤:參數為無號整數
public void Foo2(UInt32 parm) { }
CLS 相容性檢查只針對組件外部可存取的成員。若 Foo 與 Foo2 為 internal 或 private,則不受限制。只有對外公開的介面才需符合 CLS。
屬性是否相容,取決於其型別是否為 CLS 相容且已正確標記。若 MyClass 未標記為 CLS 相容,則擁有該型別屬性的類別也不相容。
若你的公用/受保護介面不相容,使用者就必須包裝你的型別才能建立相容組件,這增加了他們的負擔。身為組件設計者,應盡力使組件符合 CLS,這是讓使用者輕鬆達成相容性的最簡單途徑。