在C#析构函数(Finalizer)中您不能访问类的托管成员是正确的吗?如果是真的,为什么呢?您还知道其他哪些C#终结器限制?
例子:
class MyClass
{
private FileStream _fs;
private IntPtr _handle;
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
~MyClass()
{
Dispose(false);
}
private void Dispose(bool isDisposing)
{
if (isDisposing)
{
_fs.Dispose(); // Won't be accessed from destructor
}
//some way to release '_handle' - this happans anyway (Called by Dispose or by Destructor)
}
}
是的,您不应从终结器或终结Dispose
器调用该方法时访问其他托管类。在执行对象的终结器时,它一旦被引用的任何托管对象的状态都是不确定的。它们可能仍然存在,可能自己正在等待定稿,或者可能已经被垃圾回收了。此外,终结器在不同的线程上运行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句