【发布时间】:2010-05-28 17:48:39
【问题描述】:
我的问题可能更多地与语义有关,而不是与IDisposable 的实际使用有关。我正在实现一个单例类,该类负责管理在应用程序执行期间创建的数据库实例。当应用程序关闭时,这个数据库应该被删除。
现在我有这个删除由应用程序在关闭时调用的单例的Cleanup() 方法处理。当我为Cleanup() 编写文档时,我突然意识到我在描述应该使用Dispose() 方法来清理资源。我最初没有实现IDisposable,因为它在我的单例中似乎不合适,因为我不想要任何东西来处理单例本身。目前没有,但将来可能是这个Cleanup() 可能被调用但单例应该仍然存在的原因。我想我可以在 Dispose 方法中包含GC.SuppressFinalize(this); 以使其可行。
因此,我的问题是多方面的:
1) 在单例上实现IDisposable 根本上是个坏主意吗?
2) 我是否只是通过使用 Cleanup() 而不是 Dispose() 来混合语义,并且由于我正在处理资源,所以我真的应该使用 dispose 吗?
3) 将使用GC.SuppressFinalize(this); 实现“Dispose()”,这样我的单例实际上不会被破坏,以防我希望它在调用清理数据库后存活。
【问题讨论】: