.net 最佳实践:覆盖组件上的OnDispose(bool disposing)和Disposed事件

.net 最佳实践:覆盖组件上的OnDispose(bool disposing)和Disposed事件,.net,components,idisposable,.net,Components,Idisposable,在.Net中,组件类公开了一个Disposed事件。它还提供一个受保护的成员OnDispose(bool disposing) 扩展组件的自定义组件的最佳实践是什么?在构造时重写OnDispose(bool)或将事件处理程序附加到Disposed 我的感觉是应该重写OnDispose(bool)并密封类 想法?我建议重写该行为,因为组件的实现者可以访问事件处理程序,因此可能会意外地取消disposer实现的注册。我认为,您可能还需要根据您的自定义组件正在执行的操作来执行此操作,因为如果您有有状态

在.Net中,
组件
类公开了一个
Disposed
事件。它还提供一个受保护的成员
OnDispose(bool disposing)

扩展
组件的自定义组件的最佳实践是什么?在构造时重写
OnDispose(bool)
或将事件处理程序附加到
Disposed

我的感觉是应该重写
OnDispose(bool)
并密封类


想法?

我建议重写该行为,因为组件的实现者可以访问事件处理程序,因此可能会意外地取消disposer实现的注册。我认为,您可能还需要根据您的自定义组件正在执行的操作来执行此操作,因为如果您有有状态对象或外部接口等,您可能需要在调用基本处理器之前运行处理任务。

通常,消费者使用事件,以便在事件发生时通知他们。如果要扩展类型并需要清理资源,则应重写Dispose(bool disposing)

Spence在事件处理程序方面部分是正确的,可以分配多个事件,但问题是您不能保证事件处理的顺序

密封类通常取决于您的设计


FxCop规则也有一些很好的信息:

正如我所听说的那样,它是一个.Net标准,继承者覆盖Xxxxx方法上的基类,用户处理Xxxxx事件