2011-01-18 2 views

答えて

20

次のいずれかの条件に該当する場合、拡張メソッドを使用します。

  • あなたはタイプのメソッドを必要とし、あなたがソースを所有していません。
  • タイプにメソッドが必要です。doはソースを所有し、タイプはインターフェイスです。
  • あなたはタイプのメソッドを必要とする、あなたははソースを所有しますが、メソッドを追加することは望ましくない結合を作成します。*

そうでない場合は、あなたが実際の型自体に実際のメソッドを使用する必要があります。

ソースを所有しているクラスや構造体の拡張メソッドを作成するのは大変だと思います。なぜ、通常のメソッドで十分な場合に、拡張メソッドで読者を混乱させるのですか?

推奨読書:Framework Design Guidelines: Extension Methods

* あなたがタイプに便利なメソッドを追加したいことを想像しますが、APIの一部であってはならないアセンブリまたはタイプに依存関係を作成する必要はありません。拡張メソッドを使ってこれを管理することができます。

+6

もう一つの場合よりもきれいに見えることを見つける:あなたは、ソースが、所有し、種類の方法が必要それ以外の場合には望ましくない結合を生成するであろう。 – JaredPar

+0

@Jared - 良い点 - 私はそれを追加します! –

2

Try this Stackoverflow post for a discussion about extension method best practices.

私の観点から、私は特定の種類のユーティリティ機能の多くを持っているとき、私は拡張メソッドを使用します。

私は...

string.ExtensionMethod(); 

は私が追加することになります...

StringHelper.ExtensionMethod("string to do something with"); 
+0

しかし、あなたが '' 'ExtensionMethod()' ''を書いた人ではないときは、公式のC#文書で '' '' ExtensionMethod'''を見つけようとしばらく時間を費やして、あなたが間違った場所。 –