186

CLSCompliant属性是什么?

4

5 回答 5

199

CLSCompliant当您想确保它可以被任何其他 .NET 语言使用时,您可以使用该属性标记类。
这些是基本规则:

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

  2. 像指针这样的不安全类型不应该与public成员一起使用。但是它们可以与private成员一起使用。

  3. 类名和成员名不应仅因大小写而异。例如,我们不能有两个名为MyMethod和的方法MYMETHOD

  4. 只有属性和方法可以重载,运算符不应该重载。

于 2009-02-20T17:18:34.600 回答
48

它告诉您的代码的其他使用者它是符合 CLS的,并且还会让 C# 编译器检查它是否符合您的 CLS。

引用的文章包含有关 CLS 合规性的更多详细信息。

于 2009-02-20T17:20:23.690 回答
47

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

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

如果您打算让其他开发人员使用您的代码,那么您的 API(您的公共类和方法)应该符合 CLS。您应该通过将 CLSCompliantAttribute 添加到您的程序集来声明这一点。如果您不是为他人写作,则无需遵守 CLS,尽管FxCopFramework Cop)不同意我的观点。

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

于 2009-02-20T18:18:51.850 回答
13

符合 CLS 是 CLR 允许的完整语言范围的子集。它将其限制为大多数以 CLR 为目标的语言可能可用的子集。这会增加,但不能保证所有面向 CLR 的语言都可以使用您的库。

于 2009-02-20T17:20:05.267 回答
11

因为它适合这里:要标记整个项目符合 CLS,请将此行添加到AssemblyInfo.cs(可以在解决方案资源管理器的属性下找到)

[assembly:CLSCompliant(true)]

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

<Assembly: CLSCompliant(True)>

感谢使您的代码符合 CLS 标准

于 2015-09-21T16:09:22.147 回答