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