1

该问题的答案声称,如果泛型类的使用者未指定类型,则无法指定将使用的默认类型参数。

但是,当使用预定义的通用 EventHandler 委托来处理引发事件时……如果您不需要在 EventArgs 参数中传递的任何数据,则实际上不必指定类型参数。换句话说,public event EventHandler<TEventArgs> EventDelegate;你可以使用而不是使用public EventHandler EventDelegate;

在我对泛型的极其有限的使用中,我发现在不指定类型参数的情况下使用泛型类是不可能的,并且针对链接问题给出的答案会同意这一点,那么预定义的泛型EventHandler<TEventArgs>委托是怎么回事违反这个规则?

4

1 回答 1

6

不,这不是“默认”值。 EventHandler并且EventHandler<T>是完全不同的类型。同样的事情也适用于IEnumerableIEnumerable<T>所有其他表现出这种模式的类似名称的类型。

你可以很容易地推出你自己的版本。

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

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