Tag: cls兼容

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

我发现了很多关于CLS合规性的网页。 我了解到CLS的合规性: 是保证不同assembly兼容性的一种方法 。 是一种声明高安全性代码的方法 许多人写“如果你写代码,你应该写它CLS兼容”。 但据我所知,在通用软件中没有理由使用CLS。 我是对的,还是我错过了什么?

为什么这个名字带下划线不符合CLS?

为什么我得到编译器警告 标识符“Logic.DomainObjectBase._isNew”不符合CLS 为下面的代码? public abstract class DomainObjectBase { protected bool _isNew; }

.NET中的“CLSCompliant”属性是什么?

什么是CLSCompliant属性?

.NET中API断开更改的权威指南

我想尽可能多地收集有关.NET / CLR中API版本化的信息,特别是API更改如何做或不做中断客户端应用程序。 首先,我们来定义一些术语: API更改 – 对types的公开可见定义(包括其任何公共成员)的更改。 这包括更改types和成员名称,更改types的基types,从types的已实现接口列表中添加/删除接口,添加/删除成员(包括重载),更改成员可见性,重命名方法和types参数,添加默认值对于方法参数,在types和成员上添加/删除属性,以及在types和成员上添加/删除genericstypes参数(我错过了什么?)。 这不包括成员机构的任何变化,或私人成员的任何变化(即我们没有考虑到反思)。 二进制级别中断 – API更改导致客户端程序集针对旧版API进行编译,可能无法使用新版本加载。 示例:更改方法签名,即使它允许以与以前相同的方式调用(即:void返回types/参数默认值重载)。 源代码级别中断 – API更改导致现有代码被编写为针对较早版本的API进行编译,可能无法使用新版本进行编译。 但是,已编译的客户端程序集像以前一样工作。 例如:添加一个新的重载,可能导致以前明确的方法调用不明确。 源代码级安静语义更改 – 导致现有代码写入API的老版本API进行编译的API更改会悄悄地改变其语义,例如通过调用不同的方法。 该代码应该继续编译没有警告/错误,以前编译的程序集应该像以前一样工作。 例如:在现有的类上实现一个新的接口,导致在重载parsing期间select不同的过载。 最终的目标是尽可能多地编目尽可能多的破坏性和安静的语义API变化,描述破坏的确切效果,以及哪些语言不受其影响。 为了扩展后者:尽pipe一些变化普遍影响所有语言(例如,向接口添加新成员将会以任何语言破坏该接口的实现),但是一些需要非常特定的语言语义来进入rest。 这通常涉及方法重载,并且通常涉及任何与隐式types转换有关的操作。 在这里,即使对于符合CLS的语言(即至less符合CLI规范中定义的“CLS消费者”规则的语言),在这里似乎也没有任何方法来定义“最小公分母” – 尽pipe我会欣赏有人纠正我在这里是错误的 – 所以这将不得不通过语言去语言。 那些最感兴趣的人自然就是.NET开箱即用的:C#,VB和F#; 但是其他的如IronPython,IronRuby,Delphi Prism等也是相关的。 angular落案例越多,它就越有意思 – 像删除成员这样的事情是不言而喻的,但是,例如方法重载,可选/默认参数,lambdatypes推断和转换操作符之间的微妙交互可能是非常令人惊讶的有时。 几个例子来启动这个: 增加新的方法重载 种类:源级别中断 受影响的语言:C#,VB,F# 更改前的API: public class Foo { public void Bar(IEnumerable x); } 更改后的API: public class Foo […]

为什么unsigned int不符合CLS?

为什么无符号整数不符合CLS? 我开始认为型号规格只是为了性能,而不是正确性。