现在我将删除操作由应用程序在关闭时调用的单例的Cleanup()方法处理.当我为Cleanup()编写文档时,让我感到震惊的是我正在描述应该使用Dispose()方法来清理资源.我原本没有实现IDisposable因为它在我的单身中看起来不合适,因为我不想要任何东西来处理单身人士本身.目前还没有,但是将来可能会出现这样一个原因,即可能会调用此Cleanup(),但单例仍然需要存在.我想我可以包含GC.SuppressFinalize(this);在Dispose方法中使这个可行.
因此,我的问题是多方面的:
1)在单例上实现IDisposable从根本上是一个坏主意吗?
2)我只是通过使用Cleanup()而不是Dispose()来混合语义,因为我正在处理资源我真的应该使用dispose吗?
3)将使用GC.SuppressFinalize(this)实现’Dispose()’;这样我的单身实际上并没有被破坏,因为我希望它在调用清理数据库后生存.
解决方法
现在将它放入,并在应用程序完成后处理对象,并不一定是坏事.当你打电话时,你必须要小心.如果您真的关心清理并且只有一个引用它,那么您可以将清理代码放在对象终结器~WithClass中,这样它只会被调用.Net确定它不再需要(当应用程序关闭,如果它是一个真正的单身人士).
Am I just mixing semantics here by
having a Cleanup() instead of a
Dispose() and since I’m disposing
resources I really should use a
dispose?
是的,这只是语义. Dispose是显示在程序完成对象后需要清除的东西的标准.
Will implementing ‘Dispose()’ with
GC.SuppressFinalize(this); make it so
my singleton is not actually destroyed
in the case I want it to live after a
call to clean-up the database.