2010-08-13 48 views

回答

41

在你的AssemblyInfo.cs文件,你可能有這樣一行

[assembly:CLSCompliant(true)] 

如果這樣做,那麼下面的規則必須得到滿足。 (拷貝麪食從http://www.devarticles.com/c/a/C-Sharp/Making-Your-Code-CLS-Compliant/

  1. 無符號類型不應該是類的公共接口的一部分。這意味着公共字段不應該具有像uint或ulong這樣的無符號類型,公共方法不應返回無符號類型,傳遞給公共函數的參數不應具有無符號類型。但是,無符號類型可以是私有成員的一部分。

  2. 像指針這樣的不安全類型不應該與公共成員一起使用。但是,它們可以與私人會員一起使用。

  3. 類名和成員名稱不應僅因其大小寫而有所不同。例如,我們不能有兩個名爲MyMethod和MYMETHOD的方法。

  4. 只有屬性和方法可能被重載,運算符不應該被重載。

+0

未簽名類型可能是公共接口的一部分,如果它們沒有公開任何使用某種語言編寫的代碼而沒有未簽名類型的代碼可能想要使用但不能這樣做的功能。例如,將32位無符號值存儲爲四個連續字節的方法可以合法地包含「UInt32」和「Int64」的重載,並且類可以提供一種將四個連續字節轉換爲「UInt32」的方法提供了一個可以返回與Int64相同的值。 – supercat 2014-06-02 16:48:56

5

這是一個老問題,但我認爲更好的解釋是由於未來的調查人員(比如我自己)。

首先,其他答案中的鏈接提供了此警告給出的原因的詳細信息。總之,爲公共語言運行時(例如C#)編寫的代碼如果可以與爲CLR設計的其他語言進行交互,則該代碼是CLS兼容的。這意味着特定於該語言的某些數據類型對整個運行時不常見,並不符合規定。關於變量和方法的快速而簡單的解決方法是給它們提供可見性修飾符internal,它指定方法,類,屬性等在它正在構建的組件之外是不可見的。這隻能在你不需要或想在組件外使用的物品上完成;對於那些你想要看到的,使用符合CLS的數據類型。

相關問題