我为什么要编写符合CLS的代码?

Luc*_*uca 61 c# cls-compliant

我发现了很多关于CLS合规性的网页.

我了解CLS合规性:

许多人写道:"如果你编写代码,你应该把它写成符合CLS的." 但据我所知,没有理由在通用软件中使用CLS.

我是对的,还是我错过了什么?

Rem*_*anu 47

如果您编写库或框架,确保您的库可以从任何CLR语言使用是有意义的.

  • afaik no,因为CIL可能包含某些CLR语言无法使用的功能.例如.你有一个采用UInt32参数的方法,CIL代码很好,但是不能从没有unsigned概念的语言调用该方法. (5认同)
  • 不要挑剔@TonyD,但它可能更容易谷歌,而不是在这里评论问它.https://msdn.microsoft.com/en-us/library/system.clscompliantattribute(v=vs.110).aspx (3认同)
  • @TonyD [通用语言规范(https://msdn.microsoft.com/en-us/library/vstudio/12a7a7h3%28v=vs.100%29.aspx) (2认同)

Dat*_*han 43

如果您正在分发库,则CLS合规性尤其重要 - 特别是,编写符合CLS的保证,您的库可以被所有符合CLS的语言使用.

例如,Visual Basic不区分大小写,而C#是.CLS合规性的要求之一是公共(和受保护的)成员名称不应仅仅根据大小写不同,从而确保您的库可以被Visual Basic代码安全使用,或者任何其他基于案件.

  • 还有一条规则是成员不能以下划线开头。这让我想知道如何命名由公共属性包装的受保护变量...不能使用小写版本,不能使用下划线...下一个丑陋的替代方案是什么? (2认同)

pli*_*nth 17

答案是允许跨.NET语言的最大兼容性.CLS是用得上,使C#组件与F#,Python的铁,C++/CLI中,VB.NET,嘘声和所有其他.NET语言.走出那个边界,你的装配可以正常工作,但不一定.


Ada*_*son 11

可能没有特定的理由让你的代码符合CLS,但人们指的是它是一种"最佳实践" - 你应该做的事情,因为这是一个好习惯,而不是对特定场景更好.

换句话说,除非你有理由不让你的代码符合CLS,否则这是个好主意.