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

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

我的问题是,如果Dispose()方法的实现是幂等的 – 当在同一个实例上调用多次时,实例将被“处理”一次,后续调用不抛出异常。在Java中,具有相似行为的大多数对象(再次以流和数据库连接出现在我的头脑中)是对于它们的close()操作是幂等的,这恰好是Dispose()方法的模拟。

然而,我个人对.NET(尤其是Windows Forms)的经验表明,并不是所有的实现(这是.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的对象将具有一个布尔字段标志,表示它是否已被处理,而后续调用也不会执行任何操作(因为它已被处理)。

http://stackoverflow.com/questions/8923853/should-idisposable-dispose-implementations-be-idempotent

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c# – 应该IDisposable.Dispose()实现是幂等的吗?