【问题标题】:Dispose pattern usage处置模式使用
【发布时间】:2016-06-01 20:52:38
【问题描述】:

我在Dispose PatternDispose Implementation 上阅读了这些文章。我的问题是,当从终结器调用虚拟 dispose(bool) 方法时,为什么我们只将 false 传递给该方法并释放非托管资源?如果我们通过 true,它会破坏什么?

即使我们已经实现了 IDisposble 接口,它仍然依赖开发人员将代码包装在 using 块中或显式调用 Dispose() 以便使用 Dispose() 方法被调用。如果开发者不够细心,IDisposble接口的插件是什么?

【问题讨论】:

    标签: design-patterns dispose


    【解决方案1】:

    从您的第一个链接:

    布尔参数disposing指示该方法是否 从 IDisposable.Dispose 实现或从 终结者。 Dispose(bool) 实现应该检查参数 在访问其他引用对象之前(例如,在 前面的示例)。此类对象应仅在 从 IDisposable.Dispose 实现调用方法(当 disposing 参数等于 true)。如果方法是从 终结器(处置为假),其他对象不应该 访问。 原因是对象以不可预知的方式完成 订单,所以他们,或者他们的任何依赖,可能已经有了 已经敲定了。

    希望这会有所帮助。

    【讨论】:

    • 但是第二个链接实现了当条件为真时释放托管源,包括取消挂钩事件。在这种情况下,如果 finalizer 调用了 dispose 方法并将 false 传递给它,那么事件将不会被取消挂钩并且会导致内存泄漏,不是吗?
    • Dispose 模式只是一个指南。有人可能有正当理由不这样做,但我个人会遵循 MS 的 Dispose 指南。
    猜你喜欢
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2014-11-03
    • 1970-01-01
    • 2011-03-24
    相关资源
    最近更新 更多