1

この質問の回答は、ジェネリッククラスのコンシューマーが型を指定しない場合に使用されるデフォルトの型引数を指定することは不可能であると主張しています。

ただし、事前定義された汎用EventHandlerデリゲートを使用してイベントの発生に対処する場合... EventArgsパラメーター内で渡される可能性のあるデータを使用しない場合は、実際に型引数を指定する必要はありません。public event EventHandler<TEventArgs> EventDelegate;つまり、を使用する代わりに、public EventHandler EventDelegate;

私の非常に限られたジェネリックの使用では、型引数を指定せずにジェネリッククラスを使用することは不可能であり、リンクされた質問への回答はこれに同意するので、事前定義されたジェネリックEventHandler<TEventArgs>デリゲートはどうですか?このルールに違反しますか?

4

1 に答える 1

6

いいえ。これは「デフォルト」の値ではありません。 EventHandlerEventHandler<T>は完全に異なるタイプです。同じことが、IEnumerableそしてIEnumerable<T>このパターンを示す他のすべての同様の名前のタイプにも当てはまります。

あなたはこれのあなた自身のバージョンをかなり簡単に転がすことができます。

class MyType
{
    void Foo(object obj) ...
}

class MyType<T> : MyType
{
    void Foo(T obj)
    {
        base.Foo(obj);
    }
}
于 2013-03-13T05:28:49.440 に答える