私は認めなければなりません、私はこの質問に少し混乱していました。@deepeeのように、あるアプローチを他のアプローチよりも使用すると思う理由を示すために、ここでコード例が適切であったことに同意します。
私の混乱の理由は、彼らが異なる目的を果たしているので、私がこの質問をすることを考えなかったであろうということです。インターフェイスは主にポリモーフィズムに使用されます。さまざまな実装をすべて同じように扱うことができるようにします。
Jon Skeetは、FuncとActionを使用した良い例を示しています。
インターフェイスを使用すると、これを行うことができます。
IAnimal animal = AnimalFactory.GetAnimal();
animal.Run();
上記のコードを使用すると、それがどのような動物であるかを知らないか、気にしません。あなたはそれが実行できることを知っていて、それを実行したいと思っています。さらに重要なことに、発信者は動物がどのように走るかを知りません。これが、アクションとインターフェース/ポリモーフィズムの違いです。何かをするための論理は具体的なクラスにあります。
アクションを使用すると、各具体的なインスタンスに何かを実行させる代わりに、実際のロジックが呼び出し元に認識されている場合に、各インスタンスに対して同じことを実行できます。
animals.ForEach(x => x.Run());
または:
animals.ForEach(x => /* do something completely different here */);
上記のコード行は、メソッドを呼び出すだけでロジックを実際のインスタンスに委任するのではなく、呼び出し元だけが何をすべきかを決定するアクションです。
彼らはさまざまな問題を解決するので、人々が特定の状況でそれらが交換可能であるとどのように考えるかを知りたいです。