22

重複の可能性:
拡張メソッドと静的ユーティリティ クラス

.NET のオブジェクトに基づいてアクションを実行する一般的な関数の API を構築しています。例えば; 文字列をチェックしてメールアドレスかどうかを確認する関数を作成しました。

私はどちらかを持つことができます:

static bool IsEmailAddress(string text)
{
    return IsMail(text);
}

または、次のように使用される拡張メソッドを作成できます。

string text = "HelloWorld@Email.com";
if (text.IsEmailAddress())
{
}

どちらがより適していますか、またはこれは汎用ライブラリであるため、技術的に両方の方法で実装し、開発者がどちらが最適かを決定できると思いますか?

4

5 に答える 5

17

拡張メソッドを作成すると、ユーザーがそのタイプを使用すると、インテリセンス中に自動的に表示されます。開発者が参照するメソッドのリストに多くのノイズを追加しないように注意する必要があります(特に再利用可能なフレームワークを作成する場合)。たとえば、これらのメソッドが特定のコンテキストでのみ使用できる場合は、「通常の」静的メソッドを使用する方がおそらく適切です。特に、などの一般的な型の拡張メソッドを実装する場合string

たとえば、ToXml(this string)拡張メソッド、または拡張メソッドを考えてみましょうToInt(this string)。これらの拡張メソッドがあると非常に便利なように見えますが、テキストをXMLに変換することは、アプリケーション全体で行うことではなく、簡単に行うことができますXmlHelper.ToXml(someString)

さらに悪いことは1つだけです。それは、に拡張メソッドを追加することobjectです。

再利用可能なフレームワークを作成している場合は、 KrzysztofCwalinaによる「Framework-Design-Guidelines」という本を絶対に読む必要があります。

于 2012-07-04T13:57:07.303 に答える
2

問題は、どの .NET Framework をターゲットにするかです。< 3.5 の場合、拡張メソッドは使用できません。そうでなければ、なぜ新しいクラスを作成するのですか?

于 2012-07-04T13:59:16.613 に答える
2

あなたのコードはエレガントで、フレームワークのシールされたクラスで拡張メソッドを定義できるので、私は拡張メソッドを好みます。

于 2012-07-04T13:49:30.997 に答える
1

拡張メソッドは、自動的に静的クラスの一部になります。これは、消費者が必要に応じて、拡張メソッドを使用するか、クラスから静的メソッドを呼び出すことができることを意味します。私はできる限り拡張メソッドを使用します。適切な名前空間に配置されている場合、それらは簡単に発見できます。

于 2012-07-04T13:52:14.100 に答える
1

拡張メソッドを使用すると、開発者は、ヘルパー クラスが何と呼ばれ、どこに配置されているかを正確に認識できなくなります。また、その存在の事実は言うまでもありません。名前空間を句に入れる必要があることに注意してください。usingおそらく、アプリケーションの共通の最上位の名前空間に配置してください。

于 2012-07-04T13:52:52.307 に答える