Tag: 幂等

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

Microsoft.NET框架提供了IDisposable接口,该接口需要实现void Dispose()方法。 其目的是实现IDisposable实现可能已分配的昂贵资源的手动或基于范围的发布。 示例包括数据库集合,流和句柄。 我的问题是,如果Dispose()方法的实现是幂等的 – 当在同一个实例上多次调用时,实例只能被“处置”一次,后续调用不会抛出exception。 在Java中,大多数具有相似行为的对象(作为示例再次出现流和数据库连接)对于close()操作是幂等的,这恰好是Dispose()方法的模拟。 但是,我个人使用.NET(特别是Windows Forms)的经验表明,并非所有实现(它们都是.NET框架本身的一部分 )都是幂等的,因此后续调用这些实现会抛出ObjectDisposedException 。 这真的让我对如何处理一次性对象的实现感到困惑。 该场景是否有共同的答案,还是取决于对象的具体上下文及其用法?