C#中泛型的默认类型.声称这是不可能的,但似乎EventHandler表现出这种行为?

Tim*_*ery 1 c# generics events delegates

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

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

在我对泛型的极其有限的使用中,我发现在没有指定类型参数的情况下使用泛型类是不可能的,并且响应链接问题给出的答案将与此一致,那么预定义泛型EventHandler<TEventArgs>委托是如何实现的呢?违反这条规则?

p.s*_*w.g 6

不,这不是'默认'值. EventHandler并且EventHandler<T>是完全不同的类型.同样的问题也发生在IEnumerableIEnumerable<T>所有表现出这种模式的其它类似命名的类型.

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

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

class MyType<T> : MyType
{
    void Foo(T obj)
    {
        base.Foo(obj);
    }
}
Run Code Online (Sandbox Code Playgroud)