小编The*_*est的帖子

Dispose vs Dispose(bool)

我很困惑处置.我正在尝试让我的代码正确处理资源.所以我一直在将我的类设置为IDisposable(使用Dispose方法),确保调用Dispose方法.

但是现在FXCop告诉我很多关于Disposing = false和调用Dispose(false)的东西.

我没有看到一个带有bool的Dispose方法.我需要制作一个吗?如果是这样,为什么?为什么不在处理时调用一个方法呢?

我在这里看到了一些代码:http://msdn.microsoft.com/en-us/library/ms244737.aspx,它展示了如何制作一个带有bool的Disposing方法.它表示它适用于本地和管理资源. 但我认为处理的全部内容仅适用于非管理资源.

此外,FXCop抱怨的路线是这样的:

    ~OwnerDrawnPanel()
    {
        _font.Dispose();
    }
Run Code Online (Sandbox Code Playgroud)

它说:

CA1063:Microsoft.Design:修改'OwnerDrawnPanel .~ OwnerDrawnPanel()',以便它调用Dispose(false)然后返回.

但是Font上没有Dispose(bool)(我能找到).

把它们加起来:

为什么我需要Dispose(bool)?如果我这样做,为什么Font没有呢?因为它没有它,为什么FXCop要求我使用它?


感谢所有的好答案.我想我现在明白了.这是

答案就像我看到的那样:

处置"非管理"资源分为两类:

  1. 包含在托管类(即Bitmap,Font等)中的资源,但仍需要调用Dispose来正确清理它们.
  2. 您已分配的资源,即本机资源的表示(即需要发布的设备上下文)

Dispose(bool)用于表示两者之间的区别:

  1. 当直接在您的对象上调用Dispose时,您希望释放两种"非托管"资源.
  2. 当您的对象用于垃圾收集时,您不必担心第一种资源.垃圾收集器在清理它们时会处理它们.您只需要担心已分配的真实本机资源(如果有).

c# dispose

36
推荐指数
3
解决办法
2万
查看次数

标签 统计

c# ×1

dispose ×1