.NET 中的“CLSCompliant”属性是什么?
-
05-09-2019 - |
题
是什么 CLSCompliant
属性?
解决方案
当您想要确保类可以被任何其他 .NET 语言使用时,可以使用 CLSCompliant 属性来标记类。这些是基本规则:
无符号类型不应该是类的公共接口的一部分。这意味着公共字段不应具有无符号类型(如 uint 或 ulong),公共方法不应返回无符号类型,传递给公共函数的参数不应具有无符号类型。然而,无符号类型可以是私有成员的一部分。
不安全类型(如指针)不应与公共成员一起使用。但是它们可以与私人成员一起使用。
类名和成员名不应仅根据大小写而有所不同。例如,我们不能有两个名为 MyMethod 和 MYMETHOD 的方法。
只有属性和方法可以重载,运算符不应重载。
其他提示
它告诉其他消费者你的代码,这是符合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 。