|
}
}
Обратите внимание, что в MyResourceWrapper теперь определяется приватный вспомогательный метод по имени Cleanup(). Передача ему в качестве аргумента значения true свидетельствует о том, что очистку инициировал пользователь объекта, следовательно, требуется освободить все управляемые и неуправляемые ресурсы. Когда очистка инициируется сборщиком мусора, при вызове Cleanup() передается значение false, чтобы освобождения внутренних высвобождаемых объектов не происходило (поскольку рассчитывать на то, что они по-прежнему находятся в памяти, нельзя). И, наконец, перед выходом из Cleanup() для переменной экземпляра типа bool (по имени disposed) устанавливается значение true, что дает возможность вызывать метод Dispose() много раз без появления ошибки.
На заметку! После "освобождения" (dispose) объекта клиент по-прежнему может вызывать на нем какие-нибудь члены, поскольку объект пока еще находится в памяти. Следовательно, в показанном сложном классе-упаковщике ресурсов не помешало бы снабдить каждый член дополнительной логикой, которая бы, по сути, гласила: "если объект освобожден, ничего не делать, а просто вернуть управление".
Чтобы протестировать последнюю версию класса MyResourceWrapper, добавим в метод финализации вызов Console.Веер():
~MyResourceWrapper()
{
Дата добавления: 2015-07-25; просмотров: 52 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Формализованный шаблон очистки | | | Тренажёр |