gpt4 book ai didi

c# - IDisposable.Dispose() 实现应该是幂等的吗?

转载 作者:IT王子 更新时间:2023-10-29 04:34:05 25 4
gpt4 key购买 nike

Microsoft.NET 框架提供了IDisposable 接口(interface),它需要实现void Dispose() 方法。其目的是启用手动或基于范围的释放 IDisposable 实现可能已分配的昂贵资源。示例包括数据库集合、流和句柄。

我的问题是,Dispose() 方法的实现是否应该是幂等的 - 当在同一个实例上多次调用时,该实例只被“处理”一次,随后的调用不要抛出异常。在 Java 中,大多数具有相似行为的对象(再次以流和数据库连接为例)的 close() 操作是幂等的,这恰好是 Dispose() 方法。

但是,我对 .NET(尤其是 Windows 窗体)的个人经验表明,并非所有实现(.NET 框架本身的一部分)都是幂等的,因此后续调用这些抛出一个 ObjectDisposedException。这真的让我对如何处理一次性对象的实现感到困惑。场景是否有一个共同的答案,还是取决于对象的具体上下文及其用法?

最佳答案

should the implementation of the Dispose() method be idempotent

是的,应该的。不知道会调用多少次。

来自 Implementing a Dispose Method在 MSDN 上:

a Dispose method should be callable multiple times without throwing an exception.

具有良好IDispose 实现的对象将有一个 bool 字段标志,指示它是否已经被释放,并且在后续调用时不执行任何操作(因为它已经被释放)。

关于c# - IDisposable.Dispose() 实现应该是幂等的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8923853/

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