最佳实践:覆盖组件上的 OnDispose(bool disposing) 与 Disposed 事件
Posted
技术标签:
【中文标题】最佳实践:覆盖组件上的 OnDispose(bool disposing) 与 Disposed 事件【英文标题】:Best practice: Override OnDispose(bool disposing) vs Disposed event on Component 【发布时间】:2010-10-02 03:52:13 【问题描述】:在 .Net 中,Component
类公开了一个 Disposed
事件。它还提供了一个受保护的成员OnDispose(bool disposing)
。
扩展Component
的自定义组件的最佳做法是什么?在构造时覆盖OnDispose(bool)
或将事件处理程序附加到Disposed
?
我的感觉是应该覆盖OnDispose(bool)
并封类。
想法?
【问题讨论】:
【参考方案1】:我建议重写该行为,因为您的组件的实现者可以访问事件处理程序,因此可能会意外取消注册您的处置器实现。我相信您可能还需要根据您的自定义组件正在执行的操作来执行此操作,因为如果您有状态对象或外部接口等,您可能需要在调用基本处置器之前运行您的处置任务。
【讨论】:
【参考方案2】:通常情况下,消费者会使用事件,以便在事件发生时通知他们。如果您正在扩展类型并需要清理资源,则应覆盖 Dispose(bool disposing)
Spence 关于事件处理程序的部分正确,可以分配多个事件,但问题是您不能保证事件处理的顺序。
密封类通常取决于您的设计。
FxCop 规则也有一些很好的信息:http://msdn.microsoft.com/en-us/library/ms244737(VS.80).aspx
【讨论】:
【参考方案3】:据我所知,这是一个 .Net 标准,继承者覆盖基类 OnXxxxx 方法,用户处理 Xxxxx 事件。
【讨论】:
以上是关于最佳实践:覆盖组件上的 OnDispose(bool disposing) 与 Disposed 事件的主要内容,如果未能解决你的问题,请参考以下文章