c# - 使用析构函数分离事件

标签 c# .net constructor destructor

注意到项目中的这段代码:

所以有一个自定义的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/

相关文章:

c# - Asp.Net 核心 MailKit : The remote certificate is invalid according to the validation proceedure

c# - ASP.NET MVC : Access controller instance from view

.net - 我在哪里可以找到 taglib-sharp 支持的所有音频文件类型的列表?

c++ - 在 header (.h) 中声明构造函数然后在类文件 (.cpp) 中定义构造函数的语法 C++

c# - .NET 中的 XML 数据管理

c# - 如何在弹出窗口周围添加阴影

c# - Windows 手机 7 - 仅限 C#?

C# 泛型 - 通过使包装类泛型获得什么?

c++ - 类不存在默认构造函数

C#/MEF 不适用于没有无参数构造函数的基类