参数类型不符合CLS,为什么?

时间:2010-08-13 09:52:19

标签: c#

我收到这样的警告 alt text 如果您知道它是什么,请解释&帮我摆脱它。 南。

3 个答案:

答案 0 :(得分:46)

在AssemblyInfo.cs文件中,您可能有一行读取

[assembly:CLSCompliant(true)]

如果这样做,则必须满足以下规则。 (来自http://www.devarticles.com/c/a/C-Sharp/Making-Your-Code-CLS-Compliant/的Copy-Pasta)

  1. 无符号类型不应该是该类的公共接口的一部分。这意味着公共字段不应该有uint或ulong等无符号类型,公共方法不应该返回无符号类型,传递给公共函数的参数不应该有无符号类型。但是,无符号类型可以是私有成员的一部分。

  2. 指针等不安全类型不应与公共成员一起使用。但是,它们可以与私人成员一起使用。

  3. 类名和成员名不应仅根据具体情况而有所不同。例如,我们不能有两个名为MyMethod和MYMETHOD的方法。

  4. 只有属性和方法可能会重载,操作符不应过载。

答案 1 :(得分:9)

这是一个老问题,但我认为未来的调查员(比如我自己)应该有更好的解释。

首先,其他答案中的链接提供了给出此警告的原因的详细信息。

但是,总而言之,如果可以与为CLR设计的其他语言进行交互,则为公共语言运行时编写的代码(例如C#)是符合CLS的。这意味着特定于该语言的某些数据类型不符合整个运行时的通用。关于变量和方法的快速简便的解决方法是为它们提供可见性修饰符internal,它指定方法,类,属性等在构建它的程序集之外是不可见的。这应该仅针对那些您不需要或不想在装配体外使用的物品进行;对于那些您想要可见的数据类型,请使用符合CLS的数据类型。

答案 2 :(得分:3)

更多信息:

您可以在符合CLS的程序集中获取这些警告,这些警告引用非CLS兼容程序集(并公开其非CLS兼容成员):