只是想知道为什么是表格的代表
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;
答案 0 :(得分:1)
回答你的“为什么”问题并不容易 - 谁知道除了他们为什么微软的BCL工程师决定这个而不是另一种方式? - 但我会做出有根据的猜测:
public delegate void EventHandler<TEventArgs>( Object sender, TEventArgs e ) where TEventArgs : EventArgs
我可以想象这个委托类型被添加到.NET BCL中作为“事后补充”。请记住,.NET 1.0没有泛型。
另一个原因是,事件处理程序通常只为一个发件人处理事件,因此在该处理程序中,您甚至不必查看sender
参数即可了解发件人,那么为什么要让委托更多通用性超出了大多数实际需要。
您通常对事件参数e
比对发件人更感兴趣,因此通过使其变得通用来避免不必要的类型转换是有意义的。