Effective C# 3rd 読書メモ 28 特定の型のコレクションに拡張メソッドを用意することを検討する

List<int>のような、組み込みの型を使用したコレクションで、さらに追加の機能が必要な場合、拡張メソッドを使って実装できる。

たとえば、System.Linq.Enumerableには、IEnumerable<T>だけでなく、型に特化した拡張メソッドも定義されている。以下はIEnumerable<int>に特化したAverage()メソッドである。

public static class Enumerable
{
    public static int Average(this IEnumerable<int> sequence)
    {
         // 実装は割愛
    }
}

Cutomerというクラスのオブジェクトのコレクションに対して専用のクエリを発行するメソッドがほしい、といった場合には、IEnumerable<Customer>を拡張したCustomerListのようなクラスを作成するよりも先に、拡張メソッドの作成を検討すべきである。
一般に、派生クラスよりも拡張メソッドのほうが再利用性が高い。

コメントをどうぞ

コメントを残す