質問

同様の問題ではなく、非常に同じことする

私はあなたがその中に多重継承と同様の効果を得ることができるインターフェースと同じ名前空間の拡張メソッドを使用すると、10個の異なるクラスに同じインタフェースを同じように実装し、重複コードを持っている必要がないことを考えていました。

これを行うことの欠点は何ですか?私はそれが普通後であなたを噛まないように戻ってくる短所だ、プロがかなり明白だと思います。

私が見短所の一つは、拡張メソッドは仮想ではないということですので、あなたは、あなたが実際には、すべてのインスタンスに対して同じように実装したいことを確認する必要があります。

正しい解決策はありません

他のヒント

私は拡張メソッドを経由して、建物のインターフェース機能を参照して問題は、もはや実際のインターフェイス型としてオブジェクトを使用することはできませんので、インターフェースを実装していないとされているということです。

私はタイプIBARのオブジェクトを受け取るメソッドを持っていると言います。私は、拡張メソッドを経由してFooクラスのIBARインターフェイスを実装する場合は、fooがIBARから派生していないと、それ(リスコフの置換原則)と交換可能に使用することはできません。確かに、私は私がfooに追加する動作を得るが、私は最初の場所でのインターフェイスを作成するための最も重要な側面を失う - ように、様々なクラスによってさまざまな方法で実現することができる抽象コントラクトを定義することができること依存クラスは、具体的な実装について知る必要はありません。

私はひどく十分な多重継承を(これまでのところ、私はそれなしで住んでいました)必要な場合は、

、私はコードの重複の量を最小限にするために代わりの組成を使用したいと思います。

この考えるまともな方法は、拡張メソッドは、のオブジェクトにの完了に何かしている間、そのインスタンスメソッドは、のオブジェクトで何か行われ、のあるです。私はフレームワークの設計ガイドラインは、可能な限りあなたがインスタンスメソッドを実装する必要があります言ってかなり確信しています。

インターフェイスは、「私はこの機能を使用して気に、それは達成されないか。」を宣言しますそれは実装にどのように選択する自由を残します。これは、メカニズム、具体的なコードを持つクラスから、意図、パブリックAPIを切り離します。

これは拡張メソッドは、その目的を倒すように見えるとしてそれらを完全に実装し、インタフェースの主な利点であると。 IEnumerable<T>は、インスタンスメソッドがあります。

編集:また、オブジェクトは、それらが含まれているデータに基づいて行動することを意図しています。拡張メソッドは、のみ(彼らは静的メソッドであるため)、オブジェクトのパブリックAPIを見ることができます。あなたは(OO無なし)それを動作させるために、オブジェクトの状態のすべてを公開する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top