更改子类型的函数的返回类型是否会破坏二进制兼容性

本文关键字:兼容性 二进制 是否 返回类型 类型 函数 | 更新日期: 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(); }

显然这里应该没有问题,你在旧返回类型上所做的一切,你仍然可以在新返回类型上做,任何isas或强制转换的行为都应该和以前一样......

那么我是否破坏了二进制兼容性,或者我可以在不打扰用户的情况下将其作为次要版本发布吗?

更改子类型的函数的返回类型是否会破坏二进制兼容性

这会破坏二进制兼容性,但不会破坏(大多数)编译时兼容性问题,因此通常很容易迁移。

请注意,如果客户端代码从该方法构造委托,它甚至可能是编译时中断。

您可能会遇到围绕您的代码创建单元测试的人员的问题。因为它是静态的,人们可以创建一个FooAdapater,如下所示:

public class FooAdapater(){ 
public IFoo GetFoo() { Return your static Bar; }
}

然后,他们可以创建一个模拟的 foo 适配器,而不是返回一个模拟的 foo。您的代码会破坏此方案。

所以,不,它不兼容二进制:-)