1

インターフェイスプログラミングに関するSOの質問でコメンターは次のように述べています-

この質問に対するほとんどの回答には、「インターフェースへのプログラミング」とはインターフェース言語構造を使用することを意味するという一般的な誤解があります。これは完全に間違っています!これは、「インターフェイスへのプログラミング」が意味することを正しく示している最初の回答です。「クライアントコード」を具象/特定のサブクラスの実装に不必要にバインドしないでください。後で変更することにした場合は、別の実装を使用するためです。不要なバインディングをすべて元に戻すには、さらに多くの作業が必要です。つまり、実装の詳細なしでプログラミング/バインドします。例: 抽象基本クラス。;)

できればC#に関連して、この点について詳しく教えてください。

4

3 に答える 3

3

私の解釈では、答えは単に「インターフェース」の概念を拡張して、「純粋な」インターフェース (つまり、C# のインターフェース) であるか、特定の実装へのバインディングであるかに関係なく、プロパティとメソッドの任意のセットへのバインディングを意味するということです。答えの要点は、クラスをそれ自体で「インターフェイス」と見なすことができるため、使用に必要な最も低い基本クラスにプログラムする必要があるということでした (一般的な契約とより具体的な契約がその例です)。interfaceListArrayList

これはSystem.IO、抽象TextReaderクラスにバインドするクラスと (存在しない)ITextReaderインターフェイスにバインドするクラスでよく見られます。

于 2013-01-28T15:53:51.713 に答える
2

例:

モバイルゲームで「動物」を実行するメソッドがある場合は、単一の IAnimalインターフェイスを定義し、すべての動物に対して独自の実行の仕組みを定義できます。

public interface IAnimal {
   Run(); 
}

public Dog : IAnimal{
   public void Run() {
       //DOG RUN CHINEMATICS
   }
}

public Elephant: IAnimal{
   public void Run() {
       //ELEPHANT RUN CHINEMATICS
   }
}

したがって、抽象化の背後に具体的な実装を隠しIAnimalます(通常はインターフェースのコントラクトと呼ばれます)。

したがって、物理エンジンの実行中に、次の1つのメソッドを定義するだけで済みます。

public void RunAnimal(IAnimal animal) {
    animal.Run(); 
}

そしてそれを次のように呼びます:

RunAnimal(new Dog());         //WILL CALL DOG CONCRETE METHOD
RunAnimal(new Elephant());    //WILL CALL ELEPHANT CONCRETE METHOD

したがって、RunAnimal方法では、動物の具体的な押し込みの詳細がIAnimal「壁」の後ろに隠されています。

編集

では、「インターフェイス構造を使用するだけでなく、インターフェイスにプログラミングするのはなぜですか」という質問に対する答えです。は:

アーキテクチャを構築またはベース化するために使用できるinterfaceisおよびinstrument 。同じことは、、またはを使用するだけで実現できます。つまり、「インターフェースへのプログラミング」とは、プログラムの最大限の保守性、柔軟性、および呼び出し可能性を確保するために、コンシューマーコードから具体的な実装の詳細を(可能な限り)隠すことを念頭に置いてプログラミングすることです。、、、、あなたが望むものは何でも使用してください。interfacecontractabstract base classsimple base classvirtual methodsinterfaceabstract classbase class

于 2013-01-28T15:48:20.557 に答える
2
  1. インターフェースを使用すると、メソッドの署名だけが得られます

  2. 抽象クラスでは子クラスに共通の振る舞いを設定できるので、共通のコードを書く

  3. C#では多重継承ができないので

複数のインターフェースを実装でき、複数の抽象クラスを継承できません

  1. WCF Remoting などの分散コンポーネントを作成する場合、クライアントと通信するためのインターフェイスを実装します。

  2. クラスにタグを付けるためにインターフェイスを使用できます

于 2013-01-28T15:53:22.480 に答える