【问题标题】:Winforms Disposing IDisposableWinforms 处理 IDisposable
【发布时间】:2008-10-22 21:14:46
【问题描述】:

有没有人有关于正确使用 dispose 和 IDisposable 的好文章或教程。我正在尝试向一些初级开发人员解释这一点,并希望获得一些额外的材料、示例等。

【问题讨论】:

    标签: c# winforms dispose idisposable


    【解决方案1】:
    【解决方案2】:

    许多关于此的旧建议来源暗示 IDisposable 以某种方式与终结器相关联。密切关注 Herb Sutter 关于这个主题的 cmets。如果您实现 IDisposable,请不要轻易得出结论,即您需要编写终结器,以“确保 Dispose 最终运行,以防客户端忘记调用它”。通常情况并非如此。一个类可以实现 IDisposable 以便它可以对其拥有的托管对象进行各种调用,例如依次处理这些对象。从终结器执行此操作绝对没有意义,因为终结器无法可靠地访问其他托管对象。此外,终结器所做的任何事情都必须能够从任何线程调用。终结器是一个非常晦涩的高级事物,而 IDisposable 是一个简单的模式,应该无处不在。以及 SafeHandle 的出现changes the situation further

    【讨论】:

      【解决方案3】:

      【讨论】:

      • "如果您创建的类不使用非托管资源,那么您不应该实现 IDisposable。"人们从哪里得到这个想法?
      【解决方案4】:

      告诉他们始终对一次性对象使用 using 语句。

      using (MyDisposable obj = new MyDisposable())
      {
        obj.some_stuff();
      
      } //obj is disposed here
      

      【讨论】:

        猜你喜欢
        • 2010-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多