1

只是想知道为什么表格的代表

public delegate void EventHandler<TSender, TEventArgs>(
       TSender sender, 
       TEventArgs e
) 
where TEventArgs : EventArgs;

框架中不存在。是否有理由只提供以下内容?

public delegate void EventHandler<TEventArgs>(
     object sender,
     TEventArgs e
)
where TEventArgs : EventArgs;
4

1 回答 1

1

回答你的“为什么”问题并不容易——因为除了他们之外,谁知道为什么微软的 BCL 工程师决定这样做而不是其他方式?- 但我会做出有根据的猜测:

public delegate void EventHandler<TEventArgs>(
    Object sender,
    TEventArgs e
)
where TEventArgs : EventArgs

我可以想象这个委托类型是作为“事后的想法”添加到 .NET BCL 中的。请记住,.NET 1.0 没有泛型。

另一个原因是,事件处理程序通常只为一个发送者处理事件,因此在该处理程序中,您甚至无需查看sender参数就已经知道发送者,所以为什么要让委托比大多数人需要的更通用实际目的。

您通常对事件参数e比对发送者更感兴趣,因此通过使其成为通用类型来避免不必要的类型转换是有意义的。

于 2012-07-10T06:24:50.677 回答