Dispose vs Dispose (bool)

Я не понимаю, что такое удаление. Я пытаюсь заставить мой код правильно распределять ресурсы. Итак, я настроил свои классы как IDisposable (с помощью метода Dispose), чтобы убедиться, что метод Dispose вызывается.

Но теперь FXCop сообщает мне много вещей о Disposing = false и вызове Dispose (false).

Я не вижу метода Dispose, который принимает логическое значение. Мне нужно сделать один? Если да, то почему? Почему бы просто не иметь метод, который вызывается при удалении?

Я видел здесь код: http://msdn.microsoft.com/en-us/library/ms244737.aspx , где показано, как создать метод Disposing, который принимает логическое значение. В нем говорится, что это для собственных и управляемых ресурсов. Но я думал, что весь смысл утилизации касается только неуправляемых ресурсов.

Кроме того, FXCop жалуется на следующую строку:

    ~OwnerDrawnPanel()
    {
        _font.Dispose();
    }

В ней говорится:

CA1063: Microsoft.Design: Modify 'OwnerDrawnPanel . ~ OwnerDrawnPanel () ', чтобы он вызывал Dispose (false) и затем возвращал.

Но Font не имеет Dispose (bool) на нем (который я могу найти).

Чтобы Подведем итог:

Зачем мне нужно Dispose (bool)? и если да, то почему у Font его нет? и поскольку его нет, почему FXCop просит меня использовать его?


Спасибо за все отличные ответы. Думаю, теперь я понимаю. Вот

Ответ, как я его вижу:

Удаление «неуправляемых» ресурсов подразделяется на две категории:

  1. Ресурсы, которые заключены в управляемый класс (например, Bitmap, Font и т. Д.), Но по-прежнему нуждаются в вызове Dispose для их правильной очистки.
  2. Ресурсы которые вы выделили, которые представляют собой собственные ресурсы (то есть контексты устройств, которые необходимо освободить).

Dispose (bool) используется для определения разницы между ними:

  1. Когда Dispose вызывается непосредственно для вашего объекта, вы хотите освободить оба вида «неуправляемых» ресурсов.
  2. Когда ваш объект готов к сборке мусора, вам не нужно беспокоиться о первом виде ресурсов. Сборщик мусора позаботится о них, когда очистит их. Вам нужно только беспокоиться об истинных собственных ресурсах, которые вы выделили (если таковые имеются). Отлично, если нет, он все равно совпадает?

11
задан Alan Moore 9 March 2011 в 05:52
поделиться