2010-08-13 396 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的数据类型。

相关问题