Let\'s go straight to it :
Old code :
public interface IFoo {} public class Foo : IFoo {} ... public static IFoo Bar() { return new Foo(); } <
public interface IFoo {} public class Foo : IFoo {} ... public static IFoo Bar() { return new Foo(); }
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.