C# · 12月 24, 2021

c# – 显式事件添加/删除,误解?

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

我认为这很简单,添加/删除只是允许我在订阅和取消订阅时执行其他逻辑?我得到它,还是有更多的?

此外,当我在这里,任何建议/最佳做法清理我的事件句柄.

解决方法 添加/删除语法通常用于将事件实现“转发”到另一个类.

清理订阅(而不是“事件句柄”)最好通过实现IDisposable来完成.

更新:对象应该实现IDisposable有一些变化. Rx团队从设计角度做出了最好的决定:订阅本身是IDisposable.常规.NET事件没有表示订阅的对象,所以选择是在发布者(定义了事件的类)和订阅者(​​通常是包含正在订阅的成员函数的类)之间.虽然我的设计本能更喜欢使用户IDisposable,但大多数真实世界的代码使发布商IDisposable:这是一个更简单的实现,并且可能存在没有实际的订阅者实例的情况.

(也就是说,如果代码实际上清除了事件订阅,大多数代码都没有.)