3

让我们直接开始吧:

旧代码:

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

新代码:

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

显然这里应该没有问题,你在旧返回类型上所做的一切,你仍然可以在新返回类型上做, anyisascast 应该和以前一样......

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

4

2 回答 2

4

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

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

于 2013-01-29T17:25:50.070 回答
-1

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

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

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

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

于 2013-01-29T17:26:00.010 回答