C#实现IDisposable只是为了清理事件处理程序

C#实现IDisposable只是为了清理事件处理程序,c#,C#,为了清理事件注册而实现IDisposable是否是糟糕的编程实践 例如: public void Dispose() { TextChanged -= TextChanged; } 看情况 如果手动调用Dispose或使用using语句调用Dispose,则可以 using(var subscriber = new MySuperSubscriber()) { // some logic } 如果您希望终结器调用Dispose,那就不好了,因为无法调用终结器,因为在事件处理程序

为了清理事件注册而实现IDisposable是否是糟糕的编程实践

例如:

public void Dispose()
{
    TextChanged -= TextChanged;
}
看情况

如果手动调用Dispose或使用
using
语句调用Dispose,则可以

using(var subscriber = new MySuperSubscriber()) {
   // some logic
}

如果您希望终结器调用
Dispose
,那就不好了,因为无法调用终结器,因为在事件处理程序中会有一个对组件的“活动”引用。

不,这根本不是一个糟糕的做法;如果活动注册的数量更多,则这是一个很好的做法。在这种情况下,一次将它们全部注销。因此,当GC调用时,它可以回收对象的内存空间。