Финализаторы в языке C#

Типам значений не разрешено иметь финализатор. Концепция финализации, или недетерминированного уничтожения, зарезервирована для экземпляров классов, или объектов. Если бы структуры имели финализаторы, то исполняющая система должна была бы управлять их вызовом при каждом выходе значения из области определения.

Будьте осторожны с инициализацией ресурсов внутри конструкторов типов значений. Просто не выполняйте ее. Рассмотрим тип значения, имеющий поле — некоторый дескриптор низкоуровневого системного ресурса. Предположим, что этот низкоуровневый ресурс распределен, или затребован, в специальном конструкторе, принимающем параметры.

В результате возникает несколько проблем, которые понадобится решить.

Поскольку создать конструктор по умолчанию, не имеющий параметров, не разрешено, каким образом затребовать ресурс, когда пользователь создает экземпляр этого значения, не используя специальных конструкторов? Ответ: никак!

Вторая проблема связана с отсутствием автоматического триггера для очистки и освобождения ресурса, поскольку нет финализатора.

Необходимо как-то заставить потребителя значения вызвать специальный метод для очистки до того, как значение выйдет за пределы контекста. Наличие требования к потребителю не забыть сделать что-нибудь, чтобы избежать утечки ресурсов, свидетельствует о неправильном дизайне.

Интерфейсы

Хотя структуре не разрешено наследоваться от некоторого класса, она может реализовать интерфейсы. Поддерживаемые интерфейсы перечисляются точно так же, как у классов, в списке базовых интерфейсов после идентификатора структуры. Обычно поддержка интерфейсов для структур – это тоже самое, что поддержка интерфейсов для классов.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100