2011-12-09 12 views
0

I次の継承構造を有する:親/子インタフェース間の移動方法

interface A 
{ 
    void Foo(); 
} 
interface B : A 
{ 
} 

をそして私はFoo()が実際に実装されている唯一の場所が(すなわち、空ではない)を実装しているクラスであることを実感B.

私はAからBにFooを移動した場合、私は何それらの実装を使用してあるすべてのアセンブリについて、もっと重要なのは、これらすべての実装クラスを再コンパイルする必要があり、そしてだろうか?

は(私はちょうど自分自身をこれを試して、と見ることができます知っているが、私はまた、何が起こっているにいくつかの「洞察力」たいと思います)、ソリューション内のすべてのファイル/クラスの場合

+0

更新:いくつかのテストプロジェクトで試行されました。 'B'を実装しているクラスのインスタンスで' Foo'を直接呼び出すと、再コンパイルする必要はありませんが、インターフェースを通して呼び出すと再コンパイルする必要があります。恥... – Benjol

答えて

1

インターフェイスの定義が逆互換性のない方法で変更されるため、他のアセンブリも再コンパイルする必要があります。一部のコードでAオブジェクトにFooが呼び出されている場合は、その部分も書き直す必要があります。

1

を:はい。クラスAが.dllライブラリに実際に存在する場合は、同様に、ライブラリを再コンパイルして参照を更新する必要があります。私はなぜこれが大きな問題であるかわかりません。 C#はかなり高速にコンパイルされ、コンパイルについては賢明です。 (ところで、プログラムを実行するたびにビルドされません)

+0

>ところで、あなたがプログラムを実行するたびに、それはとにかく構築されませんか? - いや、いや! – tomfanning

+0

私は "あなたがあなたのプログラムをビルドするたびに、コンパイルしないで" –

0

これは単にバージョニングの問題です。現在のインターフェースは「古くなっています」し、新しい「改良された」インターフェースがそれを置き換えるはずです。

このコースは、どのように使用されるかによって異なります。

関連する問題