gpt4 book ai didi

c# - 在 .NET 中重写 Dispose(bool disposing) 有什么意义?

转载 作者:IT王子 更新时间:2023-10-29 03:56:00 30 4
gpt4 key购买 nike

如果我用 C# 编写一个实现 IDisposable 的类,为什么我不能简单地实现

public void Dispose(){ ... } 

处理释放任何非托管资源?

protected virtual void Dispose(bool disposing){ ... }

总是必要的,有时是必要的,还是其他什么?

最佳答案

包括终结器、新虚方法的引入和原始处置方法的“密封”在内的完整模式非常通用,涵盖了所有基础。

除非您直接处理非托管资源(应该是 almost never ),否则您不需要终结器。

如果你密封了你的类(我对密封类的看法现在可能已经广为人知 - design for inheritance or prohibit it),那么引入虚方法就没有意义了。

我不记得我最后一次以“复杂”的方式实现 IDisposable 还是以最明显的方式实现它,例如

public void Dispose()
{
somethingElse.Dispose();
}

要注意的一件事是,如果您要获得真正健壮的代码,您应该确保在处理完后不要尝试做任何事情,并抛出 ObjectDisposedException 在适当的地方。对于将被全世界的开发人员使用的类库来说,这是一个很好的建议,但如果这只是一个在您自己的工作区中使用的类,则需要做大量的工作才能获得很少的 yield 。

关于c# - 在 .NET 中重写 Dispose(bool disposing) 有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/584549/

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