gpt4 book ai didi

c# - 在终结器中抛出异常以强制执行 Dispose 调用 :

转载 作者:太空狗 更新时间:2023-10-29 21:01:47 26 4
gpt4 key购买 nike

这是我认为推荐的典型 IDisposable 实现:

~SomeClass() {
Dispose(false);
}

public void Dispose() {
GC.SuppressFinalize(this);
Dispose(true);
}

protected virtual void Dispose(bool isDisposing) {
if(isDisposing) {
// Dispose managed resources that implement IDisposable.
}
// Release unmanaged resources.
}

现在,据我了解,终结器背后的想法是,如果我不调用 Dispose,我的非托管资源仍将正确释放。但是,据我所知,人们普遍认为不对实现 IDisposable 的对象调用 Dispose 可能是一个错误。

是否有特殊原因不完全接受这一点而改为这样做?

~SomeClass() {
throw new NotImplementedException("Dispose should always be called on this object.");
}

public virtual void Dispose() {
GC.SuppressFinalize(this);

// Dispose managed resources that implement IDisposable.

// Release unmanaged resources.
}

最佳答案

从 .NET 2.0 开始,终结器中抛出未处理的异常 causes the process to terminate如果未覆盖默认策略。

据我了解,Finalizer 不是应该抛出异常的预期位置。我认为 Dispose() 方法可能不会因为意外原因(线程中止,...)而被调用,如果终结器正确执行,仍然可以从中恢复干净.

关于c# - 在终结器中抛出异常以强制执行 Dispose 调用 :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20358401/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com