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
のようなクラスを作成するよりも先に、拡張メソッドの作成を検討すべきである。
一般に、派生クラスよりも拡張メソッドのほうが再利用性が高い。