Введите текст, который вы видите на картинке слева.
Комментарии к новости
Что еще почитать
т. е. создавать объект-аргумент во время вызова метода. Мы не можем уничтожить такой объект (ведь у нас нет ссылки на него), но об этом не следует беспокоиться, ведь объект будет уничтожен сборщиком мусора. Естественно, эту конструкцию нельзя применять в том случае, если объект класса владеет ресурсами, которые должны быть высвобождены при помощи метода.
Наличие механизма сборки мусора может серьезно повлиять на стиль программирования. Рассмотрим, например, одно из "правил хорошего тона" программирования: выделенная память всегда должна высвобождаться в той же области видимости, в которой она была выделена (кто выделил, тот и высвобождает). С точки зрения .NET мы можем сказать, что память всегда высвобождается вне области видимости фрагмента, в котором она была выделена. Это позволяет прибегнуть к конструкциям программирования, вряд ли допустимым в иных условиях. Например, если методу объекта в качестве параметра передается ссылка на другой объект, и этот объект нигде не нужен за пределами метода, можно использовать вызов:
Если методобъекта, реализующего , не был вызван в программе явно, он будет вызван сборщиком мусора при удалении объекта. Во избежание нескольких вызовов одного деструктора объекты содержат служебную переменную. Вы не должны объявлять поля класса с таким именем.
Этот текст ничем не отличается от традиционного программирования в Delphi, но в основе его действия лежит совсем другой механизм. Необходимо помнить также, что совместное использование интерфейса и деструкторанедопустимо.
Листинг 7.6 (окончание).
Листинг 7.6. Использование деструктора
Перепишем пример из листинга 7.5 с применением деструктора (листинг 7.6).
- деструктор должен быть объявлен с директивой; - деструктор не должен принимать никаких параметров.
- имя деструктора должно быть;
Деструктор, заменяющий, должен удовлетворять следующим требованиям:
Delphi 2005 позволяет нам избежать явного использования интерфейса , заменив его традиционным синтаксисом деструкторов. Если описание деструктора класса будет следовать определенным правилам, компилятор автоматически подключит интерфейс и сделает так, что деструктор будет вызываться методом, а методбудет вызывать.
Мы используем методдля закрытия файла, открытого в конструкторе класса. Необходимо еще раз отметить, что метод применим только для закрытия файла. Память, занимаемая переменной f, которая теперь является объектом, будет высвобождена сборщиком мусора, ничего не знающим об открытии и закрытии файлов.
Интерфейсобъявлен в пространстве имен.
Листинг 7.5 (окончание).
Листинг 7.5. Применение интерфейса IDisposable
Рассмотрим пример использования интерфейса(листинг 7.5).
Один из способов применять деструкторы в стиле Delphi связан с методом . Для того чтобы класс мог использовать метод, он должен реализовать интерфейс. Методявляется единственным методом этого интерфейса. Вы можете вызвать методдля высвобождения ресурсов объекта так же, как и деструктор объекта при программировании для Win32, Различие заключается в том, что, высвобождая ресурсы, связанные с объектом, метод не высвобождает память, занятую объектом (эта задача по-прежнему возлагается на сборщик мусора).
Комментариев нет:
Отправить комментарий