0

待ってください、あなたが考え始める前に、はっきりさせておきたいのですが、私はインターフェイスとアブストラクトの通常の違いについて質問するつもりはありません。

MSDNで Abstract と Interface の違いを経験しました。

それは言われています:

基本クラスを更新することにより、すべての継承クラスが変更で自動的に更新されます。
一方、インターフェイスは一度作成すると変更できません。新しいバージョンのインターフェイスが必要な場合は、まったく新しいインターフェイスを作成する必要があります。

これを参照してください: - 抽象とインターフェースの違い

誰でも次の例を使用してこれを証明できますか: -

abstract class WashingMachine
{
   abstract public void Wash();
}


class Philips : WashingMachine
{
   public Philips() {  }

   override public void Wash(){//Wash code here....}
}

class Samsung : WashingMachine
{
   public Samsung() {  }

   override public void Wash(){//Wash code here....}
}

class Videocon : WashingMachine
{
   public Videocon() {  }

   override public void Wash(){//Wash code here....}
}

ここで、 WashingMachineに次の新しい抽象メソッドを追加した場合: -

abstract public void Rinse(int loadSize);

すべての継承クラス (つまり、Philips/Samsung/Videocon) は、変更によってどのように自動的に更新されますか?

4

4 に答える 4

3

それらは更新されません -から継承するすべてのクラスに手動での実装を追加する必要があります。RinseWashingMachine

MSDN が言っていることは、抽象クラスで定義された非抽象メソッドがあり、そのメソッドを変更すると、抽象クラスから継承するすべてのクラスが自動的に変更の恩恵を受けるということです。

于 2012-07-28T11:10:11.540 に答える
0

具体的な派生型はすべて、継承された抽象メンバーの実装を提供する必要があります...したがって、ベースを変更した場合でも、型は Rinse 実装を提供する必要があります。

http://msdn.microsoft.com/en-us/library/sf985hc5(v=vs.71).aspx

于 2012-07-28T11:09:08.803 に答える
0

すべての継承クラス (つまり、Philips/Samsung/Videocon) は、変更によってどのように自動的に更新されますか?

それらは突然コンパイル不能になりますが、それはアップデートではないでしょうか?

しかし、実際には、抽象クラスの抽象メソッドとインターフェイスのメソッドの間に違いはないことを指摘したいと思います。主な違いは、抽象クラスは実装を伴うメソッドを持つことができ、インターフェースはできないという事実にあります。

実際、私は MSDN の定義が好きではなく、ややこしく誤解を招くと思います。

于 2012-07-28T11:18:32.850 に答える
0

これは、インターフェイスと抽象クラスの違いを読んだときにプログラマーが通常得る混乱です。参照する行は、抽象クラスの変更が具体的な場合にのみ当てはまります。つまり、実装でプロパティまたはメソッドを追加したということです。または、より具体的に言えば、具体的なクラスを抽象化しない基本抽象クラスの変更。このような変更は抽象クラスで可能であり、そのような変更をインターフェイスに追加する方法はありません。

于 2012-07-28T11:13:36.187 に答える