1

我很难从 MSDN EventHandler Delegate中理解以下短语:

  • “如果您的事件不生成事件数据,请将EventArgs替换为泛型类型参数;...”

我是否正确理解事件生成的数据存储在 的实例中EventArgs

附带好奇:
这句话是否意味着如果事件生成数据则不使用泛型类型 EventArgs?为什么?

主要问题是:如果事件不生成数据,
为什么要打扰EventArgs(使其成为通用或非通用)?

更新:
从提到的文章和其中包含的代码示例中,我了解到不是委托:

public delegate void EventHandler(Object sender, EventArgs e)

我要使用

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

当我的事件不生成数据时。

4

2 回答 2

1

如果您只是使用EventArgs. 文档可能只是没有提到第二种可能性,因为在所有示例中只显示带有泛型参数的单个委托定义更容易。

此外,通过EventArgs.Empty而不是null.

如果您的事件确实有数据,则需要子类EventArgs化然后使用该子类(在他们使用的示例中MyEventArgs)。 EventArgs本身没有保存数据的属性。

于 2013-02-19T06:48:00.793 回答
0

从代码中,泛型类型参数受EventArgs( where TEventArgs : EventArgs) 约束。EventHandler这意味着这是delgate 支持的最基本的类型。

调用事件处理程序时,您可以只发送null而不是EventArgs实例吗?

至于为什么,我不确定为什么他们要求所有事件都有参数,这在当时似乎是个好主意。

他们需要的一个原因EventArgs是因为(在泛型之前)EventHandler委托 required EventArgs,所以它可能是为了保持兼容性。

于 2013-02-17T03:32:45.703 回答