Microsoft.NET框架提供了需要实现void Dispose()方法的IDisposable接口。其目的是启用IDisposable实现可能已分配的昂贵资源的手动或基于范围的发布。示例包括数据库集合、流和句柄。
我的问题是,如果Dispose()方法的实现是幂等的--当在同一个实例上多次调用时,该实例只被“释放”一次,然后调用不抛出异常。在Java中,大多数具有类似行为的对象(在我看来同样是流和数据库连接)对于它们的close()操作都是幂等的,这恰好是Dispose()方法的模拟。
然而,我个人使用.NET (特别是Windows )的经验表明,并不是所有的实现(是.NET框架本身的一部分)都是幂等的,因此对这些实现的后续调用会抛出一个ObjectDisposedException。这确实让我对如何处理一次性对象的实现感到困惑。对于这个场景是否有一个共同的答案,还是取决于对象的具体上下文及其用法?
发布于 2012-01-19 09:45:22
Dispose()方法的实现是否是幂等的
是的,应该的。不知道它会被调用多少次。
来自MSDN上的实现一个Dispose方法:
应多次调用Dispose方法,而不引发异常。
一个具有IDispose良好实现的对象将有一个布尔字段标志,指示它是否已经被释放,以及在随后的调用中什么都不做(因为它已经被释放了)。
发布于 2012-01-19 09:48:27
是的,还请确保类的其他方法在对象已被释放时被调用时正确响应。
public void SomeMethod()
{
if(_disposed)
{
throw new ObjectDisposedException();
}
else
{
// ...
}
}发布于 2012-01-19 09:46:12
来自MSDN:
允许多次调用Dispose方法,而不引发异常。在第一次调用之后,该方法不应该执行任何操作。
https://stackoverflow.com/questions/8923853
复制相似问题