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

本文关键字:事件处理 程序 实现 IDisposable | 更新日期: 2023-09-27 17:58:14

实现IDisposable以清理事件注册是否是一种糟糕的编程实践?

例如:

public void Dispose()
{
    TextChanged -= TextChanged;
}

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

这取决于

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

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

如果您希望Dispose由终结器调用,那么这是不好的,因为终结器不能被调用,因为您将在事件处理程序中有一个对组件的"活动"引用。