我很难理解来自MSDN EventHandler Delegate的以下短语:
我是否正确理解事件生成的数据存储在EventArgs
的实例中?
附带好奇心:
这句话是否意味着如果事件生成数据,那么不使用泛型类型EventArgs?为什么?
主要问题是:
如果事件不生成数据,为什么要关注EventArgs
(使其成为通用或保持非泛型)?
更新
从上面提到的文章和随附的代码示例中,我理解了代替委托:
public delegate void EventHandler(Object sender, EventArgs e)
我要用
public delegate void EventHandler<EventArgs>(Object sender, EventArgs e)
当我的活动没有生成数据时。
答案 0 :(得分:1)
如果你只是使用EventArgs
,第二个就没有优势。文档可能只是没有提到第二种可能性,因为在所有示例中使用泛型参数显示单个委托定义更容易。
此外,通常会传递EventArgs.Empty
而不是null
。
如果事件确实有数据,则需要继承EventArgs
,然后使用该子类(在他们使用MyEventArgs
的示例中)。 EventArgs
本身没有保存数据的属性。
答案 1 :(得分:0)
从代码中,通用类型参数受EventArgs
(where TEventArgs : EventArgs
)约束。这意味着这是EventHandler
delgate支持的最基本类型。
调用事件处理程序时,您是否可以发送null
而不是EventArgs
个实例?
至于为什么,我不确定为什么他们要求所有事件都有参数,当时似乎是个好主意。
他们需要EventArgs
的一个原因是(在通用之前)EventHandler委托需要EventArgs
,因此可能是为了保持兼容性。