Similar question but not quite the same thingC#のインターフェイスで拡張メソッドを使用した疑似多重継承?
私はインタフェースと同じ名前空間の拡張メソッドを使用すると、重複したコードと同じインタフェース10で同じように実装を持つ必要がないという点で多重継承と同様の効果を得ることができると考えていました異なるクラス。
これにはいくつかの欠点がありますか?私はプロがかなり明白であると思う、それは後であなたを後で噛ませるために通常戻ってくる問題である。
私が見ている欠点の1つは、拡張メソッドを仮想にすることができないということです。そのため、実際にすべてのインスタンスに対して同じ方法を実装する必要があります。
「FooはIBarから派生したものではなく、互換性がない」と説明できますか? パブリッククラスFoo:IBarを使用している場合、IBarが期待される場所にFooを渡すことはできません。それとも違う意味ですか? 私はそれがインターフェイスとして機能しなくなることを認識します。機能的には、インタフェースよりも仮想メソッドを持たない具体的な基底クラスのように機能します。(良いアイデアであろうとなかろうと別の質問かもしれませんが、DRYを維持することは有益です) – Davy8
ほとんどの場合、私は多重継承の必要性はあまり感じませんが、文字通り同じコードを持つ10-20個の異なるクラスで同じインターフェースを実装している場所で繰り返しコードが繰り返されているようで、メソッドを持つ別の基底クラスからすでに派生しているため、基本クラスに入れることはできません別のインターフェイスに共通です。 – Davy8
FooがIBarから派生する場合は、IBarを実装する拡張メソッドではなく、インスタンスメソッドが必要です。これらのメソッドを拡張メソッドに委譲する予定ですか?私は実装が拡張機能によってのみ提供されていると仮定していました。委任を行っている場合は、希望のインターフェイス機能を実装する基本クラスからの構成が拡張メソッドよりも望ましいと思います。おそらく、デコレータパターンを使用して機能を提供することができます。 – tvanfosson