再会!我有个问题。假设我有一个实现 IDisposable 接口的类。此类具有某种也实现此接口的托管资源。这是我班级的最少代码。
class MyClass : IDisposable
{
private SomeContext _context = new SomeContext();
public void Dispose()
{
if(_context != null)
_context.Dispose();
}
}
然后我有一个问题。这个实现有多正确?更准确地说,它有多大的错误以及它有什么威胁?(我到处都看到了更复杂的 Dispose 模式实现)。似乎只有一个 IDisposable 字段(假设它在其内部正确实现了这种模式),为了正确释放资源,只需在正确的时间调用 _context 字段的 Dispose 方法即可. 我哪里错了?这样一个简单的实现是否适用于实践,为什么它通常不好?
一切都正确,但您可以删除对
null.如果构造了类,则
_context它不等于null,因为new它不能返回null。全部的:
请注意,有时使用以下结构是合适的:
并在每个公共方法中开始调用
EnsureSelfAlive()。允许您捕获一定数量的错误。您不需要签
isDisposed入,因为它必须能够“生存”多个调用。Dispose_context_context.Dispose()是的,这个图表是正确的。没有非托管资源,不需要终结器。进一步处理呼叫转移,即完成它的工作。
总的来说,我建议阅读:http ://sergeyteplyakov.blogspot.ru/2011/09/dispose-pattern.html ,尤其是Dispose 模式的简化版部分,与这个问题非常相似。