3

すぐに行きましょう:

古いコード:

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

新しいコード:

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

明らかに、ここで問題はないはずです。古い戻り値の型で行っていたすべてのことは、新しい戻り値の型で引き続き行うことができます。 any isasまたはキャストは以前と同じように動作する必要があります...

バイナリ互換性を壊したのでしょうか、それともユーザーに迷惑をかけずにマイナー バージョンとしてリリースすることはできますか?

4

2 に答える 2

4

これにより、バイナリ互換性が失われますが、(ほとんどの) コンパイル時の互換性の問題ではないため、通常は簡単に移行できます。

クライアント コードがメソッドからデリゲートを構築する場合は、コンパイル時のブレークになる可能性があることに注意してください。

于 2013-01-29T17:25:50.070 に答える
-1

あなたのコードの単体テストを作成した人々との間で問題が発生する可能性があります。それは静的であるため、人々は次のように FooAdaper を作成できた可能性があります:-

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

次に、モック化された foo を返すよりも、モック化された foo アダプターを作成できます。あなたのコードはこのシナリオを壊します。

したがって、いいえ、バイナリ互換ではありません:-)

于 2013-01-29T17:26:00.010 に答える