Создание объектов, предусматривающих финализацию

Создание объектов, предусматривающих финализацию

В главе 3 говорилось о том, что главный базовый класс .NET, System.Object, определяет виртуальный метод с именем Finalize() (метод деструктора). Реализация этого метода, заданная по умолчанию, не делает ничего.

// System.Object

public class Object {

 …

 protected virtual void Finalize(){}

}

Переопределяя Finalize() в своем пользовательском классе, вы создаете программную логику "уборки", необходимую для вашего типа. Поскольку этот член определяется, как protected, непосредственно вызвать метод Finalized объекта будет невозможно, Метод Finalize () объекта вызывается сборщиком мусора перед удалением объекта из памяти (если, конечно, этот метод объектом поддерживается).

Ясно, что обращение к Finalize() происходит и в процессе "естественной" сборки мусора, и в случае программной активизации сборки мусора с помощью GC.Collect(). Кроме того, метод деструктора типа будет автоматически вызван тогда, когда выгружается из памяти домен приложения, содержащий выполняемое приложение. Вы, возможно, знаете, что домены приложений используются для размещения выполняемого компоновочного блока и необходимых для него внешних библиотек программного кода. Если вы еще не знакомы с этим понятием .NET, то всю необходимую информацию вам предоставит глава 13. Здесь главное то, что при выгрузке из памяти домена приложения среда CLR автоматически вызывает деструкторы для каждого из предусматривающих финализацию объектов, созданных в процессе выполнения программы.

Теперь, независимо от того, что может говорить вам интуиция разработчика, следует подчеркнуть, что большинству классов в C# не требуется никакой явной "уборки". Причина проста: если ваши типы используют другие управляемые объекты, то все, в конечном счете, будет обработано сборщиком мусора. Создавать класс, который должен заниматься "уборкой", вам придется только тогда, когда этот класс будет использовать неуправляемые ресурсы (например, прямой доступ к дескрипторам файлов ОС, неуправляемым базам данных или другим неуправляемым ресурсам). Вы, наверное, знаете, что неуправляемые ресурсы создаются в результате прямого вызова API операционной системы с помощью PInvoke (Platform Invocation – обращение к платформе) или с помощью некоторых довольно сложных сценариев взаимодействия COM. С учетом этого возникает следующее правило сборки мусора.

Правило. Необходимость переопределения Finalize() может возникать только тогда, когда класс C# использует неуправляемые ресурсы посредством PInvoke или при решении сложных задач взаимодействия с COM-объектами (обычно с применением типа System.Runtime.InteropServices.Marshal).

Замечание. В главе 3 уже отмечалось, что не допускается переопредешть Finalize() с типами структуры. Теперь это совершенно ясно, поскольку структуры являются типами, характеризуемыми значениями, и они не размещаются в динамической памяти.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Создание объектов, предусматривающих освобождение ресурсов

Из книги Язык программирования С# 2005 и платформа .NET 2.0. [3-е издание] автора Троелсен Эндрю

Создание объектов, предусматривающих освобождение ресурсов Поскольку многие неуправляемые ресурсы являются столь "драгоценными", что их нужно освободить как можно быстрее, предлагается рассмотреть еще один подход, используемый для "уборки" ресурсов объекта. В качестве


Создание типов, предусматривающих освобождение ресурсов и финализацию

Из книги 3ds Max 2008 автора Верстак Владимир Антонович

Создание типов, предусматривающих освобождение ресурсов и финализацию К этому моменту мы с вами обсудили два различных подхода в построении классов, способных освобождать свои внутренние неуправляемые ресурсы. С одной стороны, можно переопределить System.Object.Finalize(), тогда


Создание объектов сцены

Из книги AutoCAD 2009 для студента. Самоучитель автора Соколова Татьяна Юрьевна

Создание объектов сцены В данном разделе будут рассмотрены основы создания объектов. Речь пойдет о простых объектах, однако применяемые для них правила такие же, как и для большинства сложных объектов. Кроме того, примитивы часто используются в качестве «строительных


Создание составных объектов

Из книги AutoCAD 2009. Начали! автора Соколова Татьяна Юрьевна

Создание составных объектов Составные объекты (Compound Objects) в 3ds Max 2008 представлены отдельной группой категории Geometry (Геометрия) вкладки Create (Создание) командной панели. Как правило, это тела, состоящие из двух и более простых объектов, рассмотренных выше (трехмерных объектов


Создание подобных объектов

Из книги Основы объектно-ориентированного программирования автора Мейер Бертран

Создание подобных объектов Команда OFFSET осуществляет создание подобных объектов (эквидистант) с заданным смещением. Она вызывается из падающего меню Modify ? Offset или щелчком на пиктограмме Offset на панели инструментов Modify.Можно строить подобные отрезки, дуги, окружности,


Создание подобных объектов

Из книги XSLT автора Хольцнер Стивен

Создание подобных объектов Команда OFFSET осуществляет создание подобных объектов (эквидистант) с заданным смещением. Она вызывается из падающего меню Modify ? Offset или щелчком на пиктограмме Offset на панели инструментов Modify.Можно строить подобные отрезки, дуги, окружности,


Создание объектов

Из книги VBA для чайников автора Каммингс Стив

Создание объектов Мы рассмотрели базовые операции размещения новых объектов. Простейший способ размещения записывается какcreate xи его эффект был определен триадой: создать новый объект; связать его со ссылкой x; и инициализировать его поля.Вариант этой инструкции


Создание объектов потока:

Из книги 3ds Max 2008 на 100 % автора Верстак Владимир Антонович

Создание объектов потока: <fo:flows> Объекты потока носят такое название потому, что текст в них «заливается» и выравнивается, заполняя страницу, программой, отвечающей за вывод на экран. Содержимое страницы управляется объектами потока.Есть два вида объектов потока:


2.2. Создание объектов сцены

Из книги AutoCAD 2008 для студента: популярный самоучитель автора Соколова Татьяна Юрьевна

2.2. Создание объектов сцены В данном разделе главы будут рассмотрены основы создания объектов. Речь пойдет о простых объектах, однако применяемые для них правила такие же, как и для большинства сложных объектов. Кроме того, примитивы часто используются в качестве


Создание подобных объектов

Из книги iOS. Приемы программирования автора Нахавандипур Вандад

Создание подобных объектов Команда OFFSET осуществляет создание подобных объектов (эквидистант) с заданным смещением. Она вызывается из падающего меню Modify ? Offset или щелчком на пиктограмме Offset на панели инструментов Modify.Можно строить подобные отрезки, дуги, окружности,


Создание подобных объектов

Из книги Написание скриптов для Blender 2.49 автора Anders Michel

Создание подобных объектов Команда OFFSET осуществляет создание подобных объектов (эквидистант) с заданным смещением. Она вызывается из падающего меню Modify ? Offset или щелчком на пиктограмме Offset на панели инструментов Modify.Можно строить подобные отрезки, дуги, окружности,


7.1. Создание блоковых объектов

Из книги автора

7.1. Создание блоковых объектов Постановка задачи Необходимо иметь возможность писать собственные блоковые объекты либо использовать блоковые объекты с классами из iOS


2 Создание и редактирование объектов

Из книги автора

2 Создание и редактирование объектов В некотором смысле, меши - наиболее важный тип объектов в 3D-приложении. Они лежат в основе большинства видимых объектов и являются сырьём, которое может быть оснащено (rigged) и анимировано в дальнейшем. В этой главе речь идет о создании