作为一名OSS图书馆作者,我总是试图让我的东西符合CLS标准。但MS不会让这很容易。他们经常把你带入陷阱22,如下所示:
我知道没有.NET语言不支持以下划线开头的变量,我已经在很多地方使用它们,其中变量需要对子类可见。
我已经厌倦了这些警告,而且我打算在我的30多个C#库上关闭汇编级别的CLS合规性。
关闭库的CLS合规性是否存在实际问题?这样做的任何真正的问题?
几十年来,微软已经发布了关于软件的不可听的指导,其中5%的指标值得编码。我找不到任何证据证明这个最佳实践有任何真实的对任何事情的影响但是,要小心,我正在检查。
不,这不是这个问题的反面的重复:Any reason not to mark a DLL as CLSCompliant?
我在这里寻找实际的结果和效果,而不是MS实习生的建议。
例如,如果IronPython,IronRuby或F#无法读取或写入以下划线开头的变量,那就会产生影响,尽管这只会导致用户对某些对象进行子类化时出现问题。
如果语言或工具完全无法使用程序集,除非它被标记为符合CLS,现在这是一个大问题。
答案 0 :(得分:5)
据我所知,实际或真正不合规问题您将失去保证。
http://msdn.microsoft.com/en-us/library/bhc3fa7f.aspx
就像超频你的电脑或驾驶你的汽车上有第三方模式一样,如果出现任何问题(即使它恰好工作),你会失去原来供给你的人的“官方”支持。
在符合CLS的情况下,您将失去MS对您的代码与其他语言的互操作性的支持(我自己的重点):
如果您设计符合CLS的类库,您的库将有一个 保证互操作性与广泛的编程 语言
至于所有的捕获22,我都不知道。不能说我一直关心CLS合规。
答案 1 :(得分:4)
关于您用作示例的问题:
结论:对受保护甚至公共变量通常 no 。它都可以使用属性建模。