是什么 CLSCompliant 属性?

有帮助吗?

解决方案

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

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

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

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

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

其他提示

它告诉其他消费者你的代码,这是符合CLS ,也使得C#编译器的检查的,它是符合CLS适合你。

引用的文章包含有关什么CLS遵从性需要有更详细的。

其他的答案是否正确。让我澄清一些事情 - CLS代表公共语言规范。这是一套.NET语言必须实现和理解规则和要求的语言功能微乎其微。这组是href="http://msdn.microsoft.com/en-us/library/zcx1eb1e.aspx" rel="noreferrer">通用类型系统中

是符合CLS意味着你可以写,可以通过可以被编译并在CLR上运行的任何语言来消耗代码。但是,CLS遵从性不是必需的,让你在案件的灵活性,其中CLS遵从性将很难或不可能做到的。

如果你想你的代码被其他开发消耗,你的API(你的公共类和方法)应该是符合CLS。你应该通过增加CLSCompliantAttribute到您的组件声明这一点。如果你不写别人,CLS遵从性是没有必要的,但的FxCop 框架的COP)会不同意我的。

当您的组件标有CLSCompliantAttribute,编译器将(应该!)检查你的代码,看看,在编译时,它会违反任何CLS规则(其中一些的 ocdecio 的提及)和报告违反到你用于固定。

符合CLS是由CLR允许全语言频谱的子集。这也限制了有可能获得通过广大的靶向CLR语言的子集。这增加了,但并不能保证,你的库可以被所有语言面向CLR使用。

由于它适合在这里:为了纪念一个整体项目符合CLS加入这一行AssemblyInfo.cs(可以根据属性在Solution Explorer中找到)

[assembly:CLSCompliant(true)]

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

<Assembly: CLSCompliant(True)>

感谢使您的代码符合CLS

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top