【发布时间】:2012-10-10 20:17:09
【问题描述】:
我正在从事某个类层次结构实现 IDisposable 的项目。
一些类还实现了一个 Finalize 方法(~MyClass())
一般看起来像这样:
public class BaseClass : IDisposable
{
}
public class SomeClass : BaseClass
{
~SomeClass()
{
Dispose();
}
Dispose()
{
// Do some stuff.
base.Dispose();
}
}
public class AnoterClass : SomeClass
{
~AnoterClass()
{
Dispose();
}
Dispose()
{
// Do some stuff.
base.Dispose();
}
}
我想知道处理对 Dispose 的调用的正确方法是什么,因为似乎这些对象是通过调用 Dispose() 来处理的,然后由于调用了 Finalize 方法而导致崩溃。
最好在层次结构中的最低类保留一个标志(已处理受保护的布尔值),并在类层次结构的每个级别中检查它?
我发现每个可能的解决方案都需要一些代码重复,这不是我想要的。
【问题讨论】:
-
包含非托管资源的复杂层次结构看起来很奇怪。您可能应该将非托管资源保存在简单的
SafeHandles 中,并避免在复杂的对象图中使用终结器。
标签: c# .net dispose idisposable finalize