.NET中的'CLSCompliant'属性是什么?

时间:2009-02-20 17:15:39

标签: .net cls-compliant

CLSCompliant属性是什么?

5 个答案:

答案 0 :(得分:164)

如果要确保可以由任何其他.NET语言使用,请使用CLSCompliant属性标记类。 这些是基本规则:

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

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

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

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

答案 1 :(得分:44)

它告诉其他消费者您的代码是CLS compliant,并且还使C#编译器检查它符合您的CLS。

所引用的文章包含有关CLS合规性所需的更多细节。

答案 2 :(得分:36)

其他答案都是正确的。让我澄清一些事情--CLS代表公共语言规范。它是.NET语言必须实现和理解的最小规则集和所需的语言功能。该集合是common type system的子集,它定义了如何在.NET中定义类型。

符合CLS意味着您可以编写可以在CLR上编译和运行的任何语言所使用的代码。但是,不需要符合CLS,在CLS合规难以或不可能的情况下,您可以灵活地使用。

如果您希望您的代码被其他开发人员使用,那么您的API(您的公共类和方法)应该符合CLS。您应该通过将CLSCompliantAttribute添加到程序集来声明这一点。如果您不是为他人写作,则不需要CLS合规性,尽管FxCop Framework Cop)不同意我的意见。

当您的程序集标记有CLSCompliantAttribute时,编译器将(应该!)检查您的代码,以查看在编译时是否会违反任何CLS规则(其中一些 ocdecio 并向您报告违规情况。

答案 3 :(得分:12)

CLS兼容是CLR允许的完整语言频谱的子集。它将其限制为可能由目标CLR的大多数语言可用的子集。这增加了但不保证您的库可以被所有针对CLR的语言使用。

答案 4 :(得分:7)

适用于此处:要标记整个项目符合CLS,请将此行添加到AssemblyInfo.cs(可在解决方案资源管理器中的“属性”下找到)

[assembly:CLSCompliant(true)]

或等效于VB.NET(AssemblyInfo.vb隐藏在我的项目中)

<Assembly: CLSCompliant(True)>

感谢Making Your Code CLS Compliant