将 IDispose::Dispose() 设为私有

Making IDispose::Dispose() private

我有一个包含文件流的对象。文件流将在对象的生命周期内打开。我希望在对象没有更多引用时关闭文件流,但在此之前 never。如果在对象上调用 Dispose(),文件将被释放,但对象可能仍然有引用。在那之后调用其他方法是不安全的,因为文件已经被处理掉了,所以我需要在每个方法开始时执行检查以确保文件仍然有效(浪费 运行 时间)。

似乎将 Dispose() 设为私有可以解决这个问题,但话又说回来,我明白当对象没有更多引用时可能不会立即调用析构函数 - 所以基本上我必须公开一个 Dispose () 方法供调用者自行清理。这是否违背了 "smart" 内存管理的目的,有什么办法解决这个问题吗?

如果不再有对您的对象的引用,它将与内部文件流一起被垃圾回收。在 GC 期间,file stream's finalizer will be executed and the file will be closed. You don't need Dispose() to achieve it. The problem is that you don't know when the GC will run. It seems your object has a long lifetime, so it will probably be in generation 2。第 2 代 GC 可能需要很长时间才能 运行。

您应该实施 IDisposable 并在每次调用前检查对象的状态。如果对象被释放,抛出 ObjectDisposedException.