Does changing the return type of a function for a child type breaks binary compatibility?

后端 未结 2 1316
北荒
北荒 2021-01-20 16:34

Let\'s go straight to it :

Old code :

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


        
相关标签:
2条回答
  • 2021-01-20 16:44

    This breaks binary compatibility, but not (most) compile-time compatibility issues, so it's typically an easy migration.

    Note that it can even be a compile-time break if the client code constructs a delegate from the method.

    0 讨论(0)
  • 2021-01-20 16:59

    You could have problems with people who have created unit tests around your code. Because it's static people could have created a FooAdapater as follows:-

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

    They could then create a mocked foo adapter than returns a mocked foo. Your code would break this scenario.

    So, no it's not binary compatible :-)

    0 讨论(0)
提交回复
热议问题