首页 > 后端开发 > C++ > 您应该在事件声明中使用空的匿名委托吗?

您应该在事件声明中使用空的匿名委托吗?

Barbara Streisand
发布: 2024-12-29 16:10:12
原创
199 人浏览过

Should You Use Empty Anonymous Delegates in Event Declarations?

事件声明中的空匿名委托:潜在的缺点

在事件编程中,直接在事件声明上添加空匿名委托的常见做法如下所示,通过消除 null 的需要来简化事件引发检查:

// Deliberately empty subscriber
public event EventHandler AskQuestion = delegate {};
登录后复制

虽然此技术解决了特定问题,但必须考虑潜在的缺点:

  1. 性能影响: 调用空委托订阅者每个事件调用可能会带来可忽略不计的性能开销。在高频场景中,这种情况可能会累积。
  2. 维护开销:虽然空委托的意图最初可能很明确,但随着时间的推移可能会变得不言自明。对于不熟悉该模式的开发人员来说,这可能会导致维护麻烦。

另一种方法是利用处理空检查并简化事件引发的扩展方法,而不是依赖空委托:

public static void Raise(this EventHandler handler, object sender, EventArgs e)
{
    if(handler != null)
    {
        handler(sender, e);
    }
}
登录后复制

使用此扩展,事件引发变得毫不费力并减少空检查开销:

// Works, even for null events.
MyButtonClick.Raise(this, EventArgs.Empty);
登录后复制

这种基于扩展的解决方案消除了与事件声明中匿名空委托相关的性能和维护缺陷。

以上是您应该在事件声明中使用空的匿名委托吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板