.net 何时可以接受违反CLS合规性?

.net 何时可以接受违反CLS合规性?,.net,cls-compliant,.net,Cls Compliant,我想知道存在哪些可以接受的边缘案例。即使不打算从其他语言访问,我也认为,这些原则是良好的最佳实践 您是否遇到过/知道哪些情况比最佳实践更重要?我认为,在处理需要此类功能或出于性能原因的遗留层时,产品内部的库是可以接受的 但是这些不一致的接口应该在更高的级别上重新封装。嗯,属性上的“params”数组有时非常诱人(但不一致)。但我建议尽可能使用符合CLS的方法。“[sic]符合CLS有什么用?” ,从共享网络驱动器运行,域设置中的来宾配置文件等。如果违反CLS合规性,您的代码在许多安全情况下无法运

我想知道存在哪些可以接受的边缘案例。即使不打算从其他语言访问,我也认为,这些原则是良好的最佳实践


您是否遇到过/知道哪些情况比最佳实践更重要?

我认为,在处理需要此类功能或出于性能原因的遗留层时,产品内部的库是可以接受的

但是这些不一致的接口应该在更高的级别上重新封装。

嗯,属性上的“params”数组有时非常诱人(但不一致)。但我建议尽可能使用符合CLS的方法。

“[sic]符合CLS有什么用?”

,从共享网络驱动器运行,域设置中的来宾配置文件等。如果违反CLS合规性,您的代码在许多安全情况下无法运行

我个人见过很多情况,用户试图从共享网络驱动器运行他们的应用程序,但却无法,因为本地管理员在安全配置文件中杀死了不符合CLS的应用程序

总的来说,通常都有办法解决这个问题。我会对上面的评论采取相反的方法,为什么要打破它?您正在编写托管代码,为什么要故意限制您的应用程序


我想说,如果您正在构建一个API程序集或组件,您应该始终遵守它们。太多的第三方组件容易退出,在尝试从中等信任运行时将它们标记为已损坏。在某些情况下,这是他们无法运行的唯一原因。如果他们花了更多的时间来遵守这些指导原则,用户就不会被限制如何使用他们的组件。

如果您正在构建一个不会用作库的应用程序,并且您知道它不会被移植到其他平台(例如Mono),符合CLS有什么用?在区分物业及其私人支持字段时,仅依靠案例是一种良好的做法。或者,这是您的“规则”的例外情况吗?@Hosam Aly:例如,无论移植或使用情况如何,不依赖案例来区分成员都是良好的做法。@Dave case只有公共属性和私有支持字段之间的差异才符合CLS。公共成员(或课堂外可访问的成员)之间的差异仅限于案例。我同意。只要库是供内部使用的,并且您可以控制它的使用,这应该不是问题。CLS合规性和信任之间的关系是什么?我认为不符合CLS仅仅意味着您的类的某些特性可能无法从某些语言中使用;e、 g.如果集合仅将其
Count
属性公开为
UInt32
,则使用不支持该类型的语言编写的代码将无法确定其中包含多少项。如果某些功能仅在支持无符号类型的语言中有意义(例如,调用
UInt32
重载的
interlocated.Increment
,则只有在已经有这样一个
UInt32
变量要递增的情况下,样式函数才有意义)……我看不出有任何理由认为包含这样一个重载是一种错误“坏”的事情,或者限制可以使用代码的安全上下文。