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