我最近一直在研究内存管理,并且一直在研究如何管理事件,现在,我看到了事件订阅的显式添加/删除语法。
我觉得很简单,添加/删除只是让我在订阅和取消订阅时执行其他逻辑?我明白了吗,还是还有更多?
此外,当我在这里时,任何清理我的事件句柄的建议/最佳实践。
最佳答案
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/