【发布时间】:2018-12-15 16:29:25
【问题描述】:
在项目中注意到了这段代码:
所以有一个自定义的TextBox:
public sealed class CoolTextBox : TextBox
{
...
public CoolTextBox()
{
this.DefaultStyleKey = typeof(CoolTextBox);
this.TextChanged += this.CoolTextBox_TextChanged;
}
~CoolTextBox()
{
this.TextChanged -= this.CoolTextBox_TextChanged;
}
...
}
我从来没有写过这种类型的结构。但据我所知,来自谷歌的信息表明你不应该相信析构函数,因为它们可以随时被调用。
我应该只删除析构函数吗?
【问题讨论】:
-
只有在拥有已订阅事件的对象的生命周期比添加订阅的对象长时,您才需要取消订阅事件处理程序。在这种情况下,两者都是同一个对象,因此生命周期是相等的。无需退订。
-
派生类可以覆盖
OnTextChanged。您无需订阅该事件。 -
检查 WeakReference 以了解此类情况
-
Finalizer - 会调用那个 evre 吗?因为我看到它的方式......事件将使对象保持活动状态,因此永远不会调用终结器。
标签: c# .net constructor destructor