【发布时间】:2011-03-15 02:26:55
【问题描述】:
IDisposable 的实现是否应该使Dispose() 可以安全地多次调用?还是相反?大多数 .NET Framework 类采用什么方法?
具体来说,多次调用System.Data.Linq.DataContext.Dispose() 是否安全?
我之所以问是因为我想知道是否需要这种额外的保护:
public override void Dispose(bool disposing)
{
// Extra protection...
if (this.obj != null)
{
this.obj.Dispose();
this.obj = null;
}
// Versus simply...
this.obj.Dispose();
base.Dispose(disposing);
}
在处理类的IDisposable 成员时,或者我是否应该只调用this.obj.Dispose() 而不必关心它是否之前被调用过。
【问题讨论】:
-
我更喜欢 if (!= null) 语法。您还应该使用 disposing 标志来保护聚合对象的 dispose。
-
如果您的对象也有终结器,请确保仅在 'disposing' 为 false 时调用 this.obj.Dispose()。否则,您可能正在从终结器中访问另一个对象,该对象可能已经终结(终结顺序未定义,循环引用没有安全的终结顺序)。如果我是 Microsoft,我会将“disposing”标志重命名为“disposedExplicitly”或“notInFinalizer”:)
标签: c# .net idisposable