更改子类型的函数的返回类型是否会破坏二进制兼容性
本文关键字:兼容性 二进制 是否 返回类型 类型 函数 | 更新日期: 2023-09-27 17:56:27
让我们直接进入它:
旧代码 :
public interface IFoo {}
public class Foo : IFoo {}
...
public static IFoo Bar() { return new Foo(); }
新代码 :
public static Foo Bar() { return new Foo(); }
显然这里应该没有问题,你在旧返回类型上所做的一切,你仍然可以在新返回类型上做,任何is
、as
或强制转换的行为都应该和以前一样......
那么我是否破坏了二进制兼容性,或者我可以在不打扰用户的情况下将其作为次要版本发布吗?
这会破坏二进制兼容性,但不会破坏(大多数)编译时兼容性问题,因此通常很容易迁移。
请注意,如果客户端代码从该方法构造委托,它甚至可能是编译时中断。
您可能会遇到围绕您的代码创建单元测试的人员的问题。因为它是静态的,人们可以创建一个FooAdapater,如下所示:
public class FooAdapater(){
public IFoo GetFoo() { Return your static Bar; }
}
然后,他们可以创建一个模拟的 foo 适配器,而不是返回一个模拟的 foo。您的代码会破坏此方案。
所以,不,它不兼容二进制:-)