首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用EventArgs/EventArgs<T>委托类型代替…的事件的好处

使用EventArgs/EventArgs<T>委托类型代替…的事件的好处
EN

Stack Overflow用户
提问于 2010-06-29 19:01:29
回答 5查看 2K关注 0票数 5

我理解使用带有签名delegate void delegate_name(object sender, EventArgs e)的委托类型的事件的好处。

( a)但是,除了它可能为我们节省一些输入之外,我们是否还有其他原因应该使用已经定义的委托类型EventHandler/EventHandler<T>而不是用签名delegate void delegate_name(object sender, EventArgs e)声明自己的委托类型?

( b)我认为使用预定义的委托类型EventArgs/EventArgs<T>的另两个原因是:

  • 使用特定事件(比如event EventHandler my_event )的人将立即知道如何使用该事件?
  • 也许一些流行的第三方方法接受参数EventHandler/ EventHandler<T>委托类型,因此如果我们的代码可能使用那些第三方方法,我们应该使用预定义的委托EventHandler/Eventhandler<T>

谢谢

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-06-29 19:05:29

对我来说,这个问题有点奇怪。否则这样做有什么好处(定义与某些EventHandler<TEventArgs>完全匹配的委托类型)?

尽管如此,我至少可以想到这样做有一个好处:某些API已经期望处理EventHandler<TEventArgs>委托;例如,Rx扩展包含一个类似于这样的方法:

代码语言:javascript
复制
Observable.FromEvent<TEventArgs>(
    Action<EventHandler<TEventArgs>> addHandler,
    Action<EventHandler<TEventArgs>> removeHandler
);

如果您定义了自己的委托,使用这样的方法--期望使用EventHandler<TEventArgs>委托--将变得更加复杂,而不会带来任何额外的好处(无论如何,我可以看到这一点)。

票数 11
EN

Stack Overflow用户

发布于 2010-06-29 19:07:22

你忘了一个重要的:

  • 总有一天,那些会维护你的代码的疯子会发现你在哪里生活,并且伤害了你。
票数 7
EN

Stack Overflow用户

发布于 2010-06-29 19:06:31

你已经回答了自己的问题:

  • 语法糖(较少写)以维持惯例
  • 互操作性(使用EventHandler类型,让我们轻松地集成来自其他库的事件

简而言之,除非你被迫使用它,否则没有理由不使用它(这通常是人们不知道或不理解它的结果)。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3143852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档