微软.NET框架提供了IDisposable
接口,其中要求实现void Dispose()
方法。它的目的是允许手动或基于范围的释放可能已分配的昂贵资源。例如,数据库集合、流和句柄。
我的问题是,Dispose()
方法的实现是否应该是幂等的 - 当在同一实例上调用多次时,只有一次将其"处理"并且后续调用不会抛出异常。在Java中,大多数具有类似行为的对象(再次以流和数据库连接为例)对于其close()
操作是幂等的,这恰好是Dispose()
方法的类比。
然而,我个人在.NET(特别是Windows Forms中)的经验表明,并非所有实现(这些实现是.NET框架本身的一部分)都是幂等的,因此对这些的后续调用会抛出ObjectDisposedException
。这真的让我对如何处理可处理对象的实现感到困惑。对于这种情况是否有通用答案,还是取决于对象及其使用方面的具体上下文?