更改子类型的函数的返回类型是否会破坏二进制兼容性?
我们直截了当地说:
旧代码:
public interface IFoo {} public class Foo : IFoo {} ... public static IFoo Bar() { return new Foo(); }
新代码:
public static Foo Bar() { return new Foo(); }
显然这里应该没有问题,你在旧的返回类型上做的所有事情,你仍然可以在新的返回类型上执行,任何is
, as
或者cast应该像以前一样…
那么我是否打破了二进制兼容性,或者我可以将其作为次要版本发布而不会打扰用户?
这打破了二进制兼容性,但没有(大多数)编译时兼容性问题,因此通常很容易迁移。
请注意,如果客户端代码从方法构造委托,它甚至可以是编译时间中断。
您可能会遇到围绕代码创建unit testing的人员的问题。 因为它是静态的,人们可以按如下方式创建一个FooAdapater: –
public class FooAdapater(){ public IFoo GetFoo() { Return your static Bar; } }
然后他们可以创建一个模拟的foo适配器,而不是返回一个模拟的foo。 您的代码会破坏这种情况。
所以,不,它不是二进制兼容的:-)