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