注意到项目中的这段代码:
所以有一个自定义的TextBox:
public sealed class CoolTextBox : TextBox
{
...
public CoolTextBox()
{
this.DefaultStyleKey = typeof(CoolTextBox);
this.TextChanged += this.CoolTextBox_TextChanged;
}
~CoolTextBox()
{
this.TextChanged -= this.CoolTextBox_TextChanged;
}
...
}
我从来没有写过这种类型的结构。但据我所知,谷歌的信息表明你不应该相信析构函数,因为它们可以随时被调用。
我应该删除析构函数吗?
最佳答案
终结器只能用于清理非托管资源。它们可以按任何顺序调用,并且有最长执行时间。
如果您有任何非托管资源,请使用Dispose pattern .
如果您没有任何非托管资源,请实现 IDisposable
。
您应该清理的事件是您要处理的类注册到另一个生命周期更长的对象上的事件的地方。
如果您可以完全避免使用事件
,那就更好了,因为忘记取消注册处理程序可能会阻止垃圾收集。
关于c# - 使用析构函数分离事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51220972/