我知道c#中析构函数和终结符的含义和用法的不同.
但是,通常"我应该......"的回答是"不使用析构函数,而是使用MSDN中所示的dispose模式".埃里克利珀写道相当强烈反对使用析构函数不必要的.
但是,这种"模式"主张像这样编写析构函数~T() { Dispose(false); }.陈述的原因是它是一个"后备",在程序员忘记打电话的情况下调用Dispose().当然,这忽略了这样一个事实,即终结者在他们的行动中是不确定的,甚至可能永远不会运行.
因此:
如果我使用处理模式,我还应该提供析构函数吗?顺便说一下,我只处理托管资源(DataContext例如实体框架).
如果我提供了一个析构函数:如果我的类派生自一个IDisposable可能已经提供了析构函数的类,那么我是否应该提供一个析构函数呢?我认为在这种情况下永远不会写析构函数,但是文档说它无论如何都会自动调用基类的析构函数.
我有一个C#WPF UI应用程序,当我关闭它时,我总是得到一个Windows应用程序崩溃对话框("UIDemo遇到了问题,需要关闭.").
错误报告指示它是一个System.ObjectDisposedException,它指示在已处置对象上调用方法的某个位置.那很好,我明白这一部分.
我很想解决它. 我只是无法在这个混蛋上得到一个堆栈跟踪.
该例外正在逃避以下所有情况:
我必须继续的是Windows发送给MS的错误报告的神秘内容.这些十六进制的内存转储并不是那么有用.
有谁知道我怎么能得到那个痕迹?