显式事件增/删,误会?我最近一直在研究内存管理,并且一直在研究如何管理事件,现在,我看到了事件订阅的显式添加/删除语法。我认为添加/删除只允许我在订阅和取消订阅时执行其他逻辑就够简单了吗?我明白了吗,还是还有更多?此外,当我在这里时,任何关于清理我的事件处理的建议/最佳实践。添加/删除语法通常用于将事件实现“转发”到另一个类。清理订阅(与“事件句柄”相反)最好通过实施IDisposable来完成。更新:对象应该实现IDisposable有一些变化。Rx团队从设计的角度做出了最好的决定:订阅本身是IDisposable。常规.NET事件没有代表订阅的对象,因此选择是在发布者(定义事件的类)和订阅者(??通常是包含要订阅的成员函数的类)之间进行的。虽然我的设计本能更喜欢让订阅者IDisposable,但大多数真实世界的代码让发布者IDisposable:这是一个更容易的实现,并且可能存在没有实际订阅者实例的情况。(也就是说,如果代码实际上清除了事件订阅。大多数代码不会。)添加/删除属性与对其他成员使用set/get属性基本上是相同的逻辑。它允许您在注册事件时创建一些额外的逻辑,并封装事件本身。您想要执行此操作的一个很好的例子是在不需要时停止额外的计算(没有人正在收听此事件)。例如,假设事件由计时器触发,如果没有人注册该事件,我们不希望计时器工作:privateSystem.Windows.Forms.Timertimer=newSystem.Windows.Forms.Timer();私人事件处理程序_explicitEvent;公共事件EventHandlerExplicitEvent{添加{如果(_explicitEvent==null)timer.Start();_explicitEvent+=值;}删除{_explicitEvent-=值;如果(_explicitEvent==null)timer.Stop();您可能希望使用对象锁定添加/删除(事后思考)...是的,添加/删除语法允许您实现自己的订阅逻辑。当您将它们排除在外(事件的标准表示法)时,编译器会生成一个标准实现。这就像自动属性。在下面的示例中,Event1和Event2之间没有真正的区别。公共类Foo{私有EventHandler处理程序;公共事件EventHandlerEvent1{添加{处理程序+=值;}删除{处理程序-=值;}}公共事件EventHandlerEvent2;但这是与“清理”处理程序不同的主题。订阅类应该取消订阅。发布类对此无能为力。想象一个可以“清理”其事件订阅列表的类。它只能在Disposed本身时明智地这样做,然后它不太可能有效,因为Disposed类通常在Disposed后不久就可以回收。以上就是C#学习教程:显式事件增/删,理解有误?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
