Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Public class Object

Генерация общего исключения | Перехват исключений | Создание специальных исключений, способ первый | Обработка нескольких исключений. | Блок finally | Время жизни объектов | Базовые сведения о времени жизни объектов | CIL-код, генерируемый для ключевого слова new | Роль корневых элементов приложения | Поколения объектов |


Читайте также:
  1. Antonyms. Definition. Morphological and semantic classifications of antonyms.
  2. Articles (Definite, Indefinite, Zero). Personal pronouns (Subject pronouns, Object pronouns),
  3. BARCLASS.CPP
  4. Box 11: The role of public relations in the Тcotton caseУ
  5. Class Boolean
  6. Class SampleClass
  7. class Spisok

{

protected virtual void Finalize () {}

}

За счет его переопределения в специальных классах устанавливается специфическое место для выполнения любой необходимой данному типу логики по очистке. Из-за того, что метод Finalize() по определению является защищенным (protected), вызывать его напрямую из класса экземпляра с помощью операции точки не допускается.

Вместо этого метод Finalize() (если он поддерживается) будет автоматически вызываться сборщиком мусора перед удалением соответствующего объекта из памяти.

В подавляющем большинстве классов С# необходимость в создании явной логики по очистке или специального финализатора возникать не будет. Объясняется это очень просто: если в классах используются лишь другие управляемые объекты, все они рано или поздно все равно будут подвергаться сборке мусора. Единственным случаем, когда может возникать потребность в создании класса, способного выполнять после себя процедуру очистки, является работа с неуправляемыми ресурсами (такими как низкоуровневые файловые дескрипторы, низкоуровневые неуправляемые соединения с базами данных, фрагменты неуправляемой памяти и т.п.). Внутри .NET неуправляемые ресурсы появляются в результате непосредственного вызова API -интерфейса операционной системы с помощью служб PInvoke (Platform Invocation Services — службы вызова платформы) или применения очень сложных сценариев взаимодействия с СОМ. Ознакомьтесь со следующим правилом сборки мусора.

Правило. Единственная причина переопределения Finalize() связана с использованием в классе С# каких-то неуправляемых ресурсов через PInvoke или сложных процедур взаимодействия с СОМ.

Если вы хотите, чтобы ваш пользовательский класс поддерживал метод Finalize(), вы должны использовать в определении этого класса метод, очень похожий на деструктор С++:

// Переопределение System.Object.Finalize()

//с использованием синтаксиса финализатора.

public class MyResourceWrapper: Object

{

~ MyResourceWrapper ()

{

// Здесь производится очистка неуправляемых ресурсов.

// Далее в C# автоматически будет вызван метод Base.Finalize()

}

}

При обработке синтаксиса финализатора компилятор автоматически добавляет в неявно переопределяемый метод Finalize() приличное количество требуемых элементов инфраструктуры.

Финализаторы в С# очень похожи на конструкторы тем, что именуются идентично классу, внутри которого определены. Помимо этого, они сопровождаются префиксом в виде тильды (~). В отличие от конструкторов, однако, они никогда не снабжаются модификатором доступа (поскольку всегда являются неявно защищенными), не принимают никаких параметров и не могут быть перегружены (в каждом классе может присутствовать только один финализатор).

 


Дата добавления: 2015-07-25; просмотров: 43 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Фоновая сборка мусора в версии .NET 4.0| Описание процесса финализации

mybiblioteka.su - 2015-2024 год. (0.006 сек.)