c# - 使用析构函数分离事件
问题描述
在项目中注意到了这段代码:
所以有一个自定义的TextBox:
public sealed class CoolTextBox : TextBox
{
...
public CoolTextBox()
{
this.DefaultStyleKey = typeof(CoolTextBox);
this.TextChanged += this.CoolTextBox_TextChanged;
}
~CoolTextBox()
{
this.TextChanged -= this.CoolTextBox_TextChanged;
}
...
}
我从来没有写过这种类型的结构。但据我所知,来自谷歌的信息说你不应该相信析构函数,因为它们可以随时被调用。
我应该删除析构函数吗?
解决方案
终结器应该只用于清理非托管资源。它们可以按任何顺序调用,并具有最长执行时间。
如果您有任何非托管资源,请使用Dispose 模式。
如果您没有任何非托管资源,请实施IDisposable
.
您应该清理的事件是您正在处理的类注册到另一个对象上的事件,该对象将存在更长的时间。
如果您可以event
完全避免使用 s,那就更好了,因为忘记注销处理程序会阻止垃圾收集。
推荐阅读
- kubernetes - Kubernetes 的工作节点上没有临时存储资源
- python - 一个文件中的字典或数据框未从另一个文件更新
- office-js - 使用 OfficeJS 的 Excel 桌面版中的 Office 对话框 API 问题
- azure-application-insights - 跨多个应用程序见解的 Azure Query,同时联合所有不同类型
- python - 有一个创建新命令 discord.py 的命令
- reactjs - State React 中没有价值
- java - 如何将 UriComponentsBuilder 中的 .csv 文件作为查询参数传递
- javascript - DevTools 无法在 noty.js.map 中加载 SourceMap
- javascript - Google Chrome 扩展 JS 无法按预期运行
- alfresco - 如何提交