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

我们直截了当地说:

旧代码:

public interface IFoo {} public class Foo : IFoo {} ... public static IFoo Bar() { return new Foo(); } 

新代码:

 public static Foo Bar() { return new Foo(); } 

显然这里应该没有问题,你在旧的返回类型上做的所有事情,你仍然可以在新的返回类型上执行,任何isas或者cast应该像以前一样…

那么我是否打破了二进制兼容性,或者我可以将其作为次要版本发布而不会打扰用户?

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

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

您可能会遇到围绕代码创建unit testing的人员的问题。 因为它是静态的,人们可以按如下方式创建一个FooAdapater: –

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

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

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