传统的C#通用事件包括以下参数:
(object sender, EventArgs e)
我可以使用更具体的签名为e
参数实现事件,这个签名是从EventArgs
派生而来的。
那么,像EventArgs
这样的基类有什么用呢?我的意思是...它是空的。没有基/抽象/虚拟属性,也没有字段或其他东西。
为什么基本事件的参数不像下面这样简单呢?
(object sender, object eventArgs)
也就是说,为什么所有使用了特定事件参数的事件都是从EventArgs
派生而来,而不是从简单的object
派生而来?
上述问题与以下问题类似。通用形式的事件委托如下:
delegate void EventHandler<TEventArgs>(object sender, TEventArgs e)
并且对参数e
没有任何限制。 但我原本期望的是类似于where TEventArgs : EventArgs
这样的东西,以保持一致性...
object
也可以用于那个...除了.Empty
的事情。 - Marc GravellEventArgs
没有任何技术上的理由存在。只是为了保持继承的一致性而已。 - Federico Dipumaobject
,而且假定我们想传递事件源的引用。在许多情况下,源与开始无关。但如果它甚至没有强类型化并且可以是任何东西(sender
可以是int
),那么我看不出意义所在。我设计事件的方式与我设计任何其他类的方式相同 - 使用我需要的方法和参数。 - Scott Hannen