CLSCompliant
属性是什么?
5 回答
CLSCompliant
当您想确保它可以被任何其他 .NET 语言使用时,您可以使用该属性标记类。
这些是基本规则:
无符号类型不应该是类的公共接口的一部分。这意味着公共字段不应该有像
uint
or这样的无符号类型ulong
,公共方法不应该返回无符号类型,传递给公共函数的参数不应该有无符号类型。但是,无符号类型可以是私有成员的一部分。像指针这样的不安全类型不应该与
public
成员一起使用。但是它们可以与private
成员一起使用。类名和成员名不应仅因大小写而异。例如,我们不能有两个名为
MyMethod
和的方法MYMETHOD
。只有属性和方法可以重载,运算符不应该重载。
它告诉您的代码的其他使用者它是符合 CLS的,并且还会让 C# 编译器检查它是否符合您的 CLS。
引用的文章包含有关 CLS 合规性的更多详细信息。
其他答案都是正确的。让我澄清一些事情——CLS 代表公共语言规范。它是 .NET 语言必须实现和理解的最小规则集和所需的语言特性。该集合是通用类型系统的一个子集,它定义了在 .NET 中如何定义类型。
符合 CLS 意味着您可以编写任何可以在 CLR 上编译和运行的语言使用的代码。但 CLS 合规性不是必需的,在 CLS 合规性难以或不可能实现的情况下,您可以灵活应对。
如果您打算让其他开发人员使用您的代码,那么您的 API(您的公共类和方法)应该符合 CLS。您应该通过将 CLSCompliantAttribute 添加到您的程序集来声明这一点。如果您不是为他人写作,则无需遵守 CLS,尽管FxCop(Framework Cop)不同意我的观点。
当您的程序集标有 CLSCompliantAttribute 时,编译器将(应该!)检查您的代码,以查看在编译时它是否违反任何 CLS 规则(其中一些ocdecio提到)并向您报告违规情况以进行修复。
符合 CLS 是 CLR 允许的完整语言范围的子集。它将其限制为大多数以 CLR 为目标的语言可能可用的子集。这会增加,但不能保证所有面向 CLR 的语言都可以使用您的库。
因为它适合这里:要标记整个项目符合 CLS,请将此行添加到AssemblyInfo.cs
(可以在解决方案资源管理器的属性下找到)
[assembly:CLSCompliant(true)]
或等效地在 VB.NET 中(AssemblyInfo.vb
隐藏在我的项目下)
<Assembly: CLSCompliant(True)>