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