c# - 显式事件添加/删除,误解了吗?

标签 c# .net events memory-management

我最近一直在研究内存管理,并且一直在研究如何管理事件,现在,我看到了事件订阅的显式添加/删除语法。

我觉得很简单,添加/删除只是让我在订阅和取消订阅时执行其他逻辑?我明白了吗,还是还有更多?

此外,当我在这里时,任何清理我的事件句柄的建议/最佳实践。

最佳答案

add/remove 属性与其他成员使用set/get 属性的逻辑基本相同。 它允许您在注册事件时创建一些额外的逻辑,并封装事件本身。

您为什么要这样做的一个很好的例子是在不需要时停止额外的计算(没有人正在收听该事件)。

例如,假设事件是由计时器触发的,如果没有人注册该事件,我们不希望计时器工作:

private System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
private EventHandler _explicitEvent;
public event EventHandler ExplicitEvent 
{
   add 
   { 
       if (_explicitEvent == null) timer.Start();
       _explicitEvent += value; 
   } 
   remove 
   { 
      _explicitEvent -= value; 
      if (_explicitEvent == null) timer.Stop();
   }
}

你可能想用一个对象来锁定添加/删除(事后)......

关于c# - 显式事件添加/删除,误解了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2923952/

相关文章:

asp.net 按钮事件未触发

c++ - IE9 无法在 BHO 中的 HTMLWindow2 上触发 onscroll 事件

c# - 使 C# 控制台应用程序识别 .exe.config 文件中手动编辑的更改

.net - Outlook 约会时区显示问题

.net - 我如何指定主题默认字体的粗体版本?

.net - .Net 中的低延迟串行通信

c# - 有没有更好的方法来避免使用 winforms 的无限循环?

c# - "Copy Local = false"引用的项目显示 "Could not load file or assembly"

c# - 为什么标签 x = txtName.Text;受到 XSS 攻击,这里的预防措施是什么?

c# - 在 Entity Framework 和 SQL Server CE 中为实体对象生成整数标识主键