有没有人有关于正确使用 dispose 和 IDisposable 的好文章或教程。我试图向一些初级开发人员解释这一点,并希望获得一些额外的材料、示例等。
4 回答
Shawn Farkas 的这篇 MSDN 文章http://msdn.microsoft.com/en-us/magazine/cc163392.aspx是一个很好的起点。最终文章由 Joe Duffy 撰写,位于 http://www.bluebytesoftware.com/blog/2005/04/08/DGUpdateDisposeFinalizationAndResourceManagement.aspx,并在http://www.bluebytesoftware.com/blog/2008/02中进行了一些跟进/18/IDisposableFinalizationAndConcurrency.aspx
许多旧的建议来源暗示 IDisposable 以某种方式与终结器相关联。密切关注 Herb Sutter 对此主题的评论。如果您实现 IDisposable,请不要急于得出您需要编写终结器的结论,以“确保 Dispose 最终运行,以防客户端忘记调用它”。通常情况并非如此。一个类可以实现 IDisposable 以便它可以对其拥有的托管对象进行各种调用,例如依次处理这些对象。从终结器执行此操作绝对没有意义,因为终结器无法可靠地访问其他托管对象。此外,终结器所做的任何事情都必须能够从任何线程调用。终结器是一个非常晦涩的高级事物,而 IDisposable 是一个应该无处不在的简单模式。情况进一步改变。
告诉他们始终对一次性对象使用 using 语句。
using (MyDisposable obj = new MyDisposable())
{
obj.some_stuff();
} //obj is disposed here