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

时间:2013-01-29 17:21:52

标签: c# inheritance binary-compatibility

让我们直截了当地说:

旧代码:

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

新代码:

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

显然这里应该没有问题,你在旧的返回类型上做的所有事情,你仍然可以对新的返回类型进行操作,任何isas或者cast应该表现得一样前...

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

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:-1)

对于在代码周围创建单元测试的人,您可能会遇到问题。因为它是静态的,人们可以按如下方式创建一个FooAdapater: -

public class FooAdapater(){ 
public IFoo GetFoo() { Return your static Bar; }
}
然后,他们可以创建一个模拟的foo适配器,而不是返回一个模拟的foo。你的代码会破坏这种情况。

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