为什么C#中的事件需要(sender,EventArgs)?

rip*_*234 37 .net c# events

众所周知,您应该声明作为参数的事件(object sender, EventArgs args).为什么?

Gre*_*man 22

这使得消费开发人员能够为多个事件编写单个事件处理程序,而不管发件人或事件如何.

编辑:为什么你需要一个不同的模式?您可以继承EventArgs以提供任意数量的数据,并且更改模式只会使任何被迫使用此新模式的开发人员感到困惑和沮丧.

  • 我通常只是在处理程序中传递我需要的任何东西.如果我需要一个没有信息的活动,我宣布它无效.如果我需要给事件1特定的对象,我就单独传递.这不是我有一个不同的模式,我只是不确定模式的必要性(外部框架代码). (8认同)
  • 你传递了*你需要的东西,但这是不必要的灵活性,打破了既定的最佳实践,没有任何功能上的任何好处. (4认同)
  • 因此,创建一个继承自EventArgs的DCEventArgs类,并依赖于您的自定义DC类. (3认同)

use*_*288 11

实际上,这是否是做事件的最佳实践方式是有争议的.有一种思想流派,因为事件旨在将两段代码分离,事件处理程序获取发送者这一事实,并且必须知道将发送者强制转换为什么类型才能对其执行任何操作.图案.

  • 事件不是为了解耦任何事情.它们旨在提供通知,**不再是**.从MSDN - _"事件使类或对象能够在感兴趣的事情发生时通知其他类或对象"_ (2认同)

Eri*_*ard 6

因为无论语言如何,它都是任何回调机制的良好模式.您想知道谁发送了事件(发件人)和与事件相关的数据(EventArgs).


Joe*_*Joe 5

对事件传递的数据使用单个参数 EventArgs 允许您在软件的未来版本中向事件添加数据,而不会破坏现有消费者。您只需将新成员添加到现有的 EventArgs 派生类,或使用新成员创建派生类。

否则一致性和最小意外原则证明使用 EventArgs 来传递数据是合理的。

至于发送方,在某些(但不是全部)情况下,了解发送事件的类型很有用。对发送方参数使用对象以外的类型过于严格:这意味着其他发送方无法重用相同的事件签名。