2013-03-04 51 views
8

私は拡張メソッドをC#のデコレータパターンの実装として考えることができるのだろうか?目的は同じだが、実施の論理だけでなく概念も異なる可能性があるため、拡張メソッド - デコレータパターン

ありがとうございます!

+5

どのようにデコレータパターンに似ていますか?拡張メソッドは静的メソッドを呼び出すための文法的な砂糖です。静的メソッドは "普通の古い関数"です。デコレータは、メソッドをラップ/デリゲートするか、新しいメソッドを追加することによって、オブジェクトが別のタイプのオブジェクトの動作を拡張するときです。 – millimoose

+4

これは初心者のための非常に良い/有効な質問だと思います。なぜ下降票かわからない。 –

+1

何か分かっていないと思う。確かに拡張機能は、Intelisenseを見るときにタイプを「飾る」。しかし、 'StreamReader'のようなデコレータの実装を見てください。あなたはそれが 'Stream'から派生したクラスであり、実際にストリームの機能を飾っていることに気付きました。 –

答えて

7

デコレータパターンは、通常、他のインスタンスとは独立したタイプの特定のインスタンスに動作を追加することに関連しています。拡張メソッドの場合、同じスコープでコンパイルされた型のすべてのインスタンスに影響します。私はデコレータパターンの一部ではないと主張したいと思います。

6

あなたはデコレータパターンを正しく理解していないと思います。
新しいメソッドを追加することではありません。既存のメソッドの新しい機能をに追加することです。

いいえ、拡張メソッドはデコレータパターンの実装ではありません。

+0

私はこれまで見てきましたが、.NETのデコレータのコンプリートな実装は、今まで使っていたライブラリの中に隠されていませんでしたか? – Mohtaa

+1

私は現在のところ、私の頭の上から何も分かっていませんが、あなたが例を探しているなら、あなたは一見[ここ](http://stackoverflow.com/a/5551276/572644)を持つことができます。私はパターンを説明するときに具体的なものを使用しました。 –