GenericsでNodeListを作る

.NET C#2.0(別にJavaでもいいんだが)で、オブジェクトを集約するリスト(DOMのノードリストのようなクラス)を書く場合は、まず

1.対象のオブジェクトの型(クラス又はインタフェース)を作り

public class FooItem : IFoo
{}

2.作った型を集約して操作する型を作る

public class FooItemList
{
    IList items = new List();
    public IEnumerator GetEnumerator ()
    {
        return this.items
    }
    public IList Items
    {
        get { return this.items; }
    }
}

集約する型は一般的なコレクションから派生するケースもあるが、それも含めてOOP言語での常套句だ。

しかし昨日のartonさんの日記にNyaRuRuさんがコメントしたのを見て目からウロコが落ちた。

上の集約リストはGenericsを使うと以下のように一発で書けてしまうのだった。

public class FooItem : List 
{}

同じようなクラスは自分のシステムでも到るところで使っているんだが、

public class FooItemList : IEnumerable

このようにIEnumerableを実装する所までは書くんだけど、自身の型を型パラメタに使う所に一足飛びには行けなかったなぁ。