Ни один из руководств/заметок/статей, в которых обсуждается шаблон IDisposable
, не предполагает, что внутренние элементы должны быть установлены в null
в методе Dispose(bool)
(особенно, если они являются звериными животными).
Я осознал важность этого при отладке встроенного инструмента тестирования. Случилось так, что в этом буфере содержался большой массив. Мы использовали статический буфер для всей тестовой программы. Как только мы закончим с буфером, мы не смогли бы освободить этот внутренний массив, и мы не могли бы сделать этот буфер выпущенным (как это было статично).
Итак, я считаю, что после вызова Dispose()
класс должен делать все возможное, чтобы он освобождал все ресурсы, которые он использует, и делал их доступными снова, даже если сам объект, находящийся в распоряжении, не собирается обратно по GC, и не устанавливая члены в null, тем самым не позволяя собирать внутренние объекты GC, означает, что реализация Dispose не идеальна.
Каково ваше мнение об этом?