【发布时间】:2012-03-25 20:27:38
【问题描述】:
有很多问题讨论“模式化”是实现和使用 IDisposable/Dispose,但与在 C# 类终结器中拥有所有清理代码相比,它有什么优势?
确保其他类可以在类实例被垃圾回收和调用终结器之前显式调用 Dispose。它是唯一的吗?
【问题讨论】:
-
@TimSchmelter 应该是一个答案
有很多问题讨论“模式化”是实现和使用 IDisposable/Dispose,但与在 C# 类终结器中拥有所有清理代码相比,它有什么优势?
确保其他类可以在类实例被垃圾回收和调用终结器之前显式调用 Dispose。它是唯一的吗?
【问题讨论】:
您无法保证何时或什至是否会调用终结器(析构函数)。
所以为了及时清理资源(文件、数据库连接),Dispose 模式是必不可少的。
【讨论】:
IDisposable 用于避免析构函数。析构函数的问题是你永远不知道它们什么时候被调用,而带有析构函数的对象总是最后被清理。
使用 IDisposable 可以通知您的类的用户他们应该使用 using 方法。 例如:
using(MyClass myClass = new MyClass())
{
// Do something with MyClass.
}
【讨论】: