Программирование - это просто
Advertisement
Главная arrow Уроки программирования arrow Delphi изнутри arrow Delphi Изнутри. Урок 11. Класс TObject.
15.06.2024 г.
Главное меню
Главная
Интернет магазин
Программные продукты
Биржевые роботы
Искусственный интеллект
Математика и информатика
1С:Предприятие
Уроки C#
Уроки Delphi
Уроки программирования
Web-программирование
Дизайн и графика
Компьютер для блондинок
Исходники
Статьи
Платный раздел
Рассказы про компьютеры
Хитрости и секреты
Системный подход
Размышления
Наука для чайников
Друзья сайта
Excel-это не сложно
Все о финансах
.
Delphi Изнутри. Урок 11. Класс TObject. Печать E-mail
Автор megabax   
13.10.2011 г.
New Page 2

Delphi Изнутри. Урок 11. Класс TObject.

На прошлом уроке мы изучили метод MethodAddress. Сегодня изучим метод MethodName, который делает прямо противоположное - по адресу метода определяет его имя. Например, если вы запустите вот такой код:

procedure TfrmMethodName.btnMethodNameClick(Sender: TObject);

var ptr:Pointer;

begin

    ptr:=frmMethodName.MethodAddress('btnMethodNameClick');

    messageDlg(frmMethodName.MethodName(ptr),mtInformation,[mbOk],0);

end;

 

То увидите вот такое сообщение:

Delphi Изнутри. Урок 11. Класс TObject.

 

Функция FieldAddress(const Name:ShortString):Pointer возвращает указатель на поле по его имени. Использует VMT.

 

Метод GetInterface(const IID:TGUID; out Obj) :boolean - возвращает интерфейс по его уникальному идентификатору. TObject по сути дела, является "кастрированным" вариантом COM-объекта. Он даже содержит на уровне VMT информацию о трех интересных методах: QueryInterface, AddRef и Release.

 

Метод GetInterfaceEntry(const IID:TGUID):PointerEntry - возвращает точку входа в интерфейс по его УИД.

 

Метод GetInterfaceTable:PInterfaceTable - возвращает указатель на таблицу интерфейсов. Теоретически заявлено, что интерфейсов может быть до бесконечности. Однако фактически их число ограничено 10000, видимо, в целях экономии памяти.

 

Метод SafeCallException(ExceptObject: TObject; ExceptAddr: Pointer): HResult; virtual; - это безопасная обработка прерывания, однако, использование этого метода непосредственно в TObject вернет Вам E_UNEXPECTED, то есть что-то неожиданное. Вызывается каждый раз при возникновении исключения внутри кода объекта с указанием на объект исключения и адрес, вызвавший исключение.

 

Метод AfterConstruction; virtual; - Процедура, вызываемая после создания экземпляра. Вызов процедуры осуществляется по адресу, прописанному в VMT. Прямой вызов нигде не прописан, судя по всему, эта возможность прописана в RTM, где указаны все вызовы. (см. так же урок 2).

Метод BeforeDestruction; virtual; - Процедура, вызываемая до разрушения объекта. (см. так же урок 2)

 

Метод  Dispatch(var Message); virtual; - Вследствие использования Windows в качестве базовой платформы разработчики решили не проходить мимо основного способа обработки межобъектного взаимодействия - системы сообщений. Этот способ как раз и реализуется этим методом. Весьма разумно было поместить его именно в TObject, ведь он является базовым для всех классов, определенных в рамках объектной модели Delphi. Этот метод сканирует VMT на наличие обработчика сообщения, ID которого указан в первых 4 байтах (длинное слово,Cardinal) параметра Message и если не находит, то вызывает DefaultHandler. То есть можно отлавливать события, происходящие не только у элементов управления, но и у классов низшей иерархии.

Метод  DefaultHandler(var Message); virtual; - Обработчик событий по умолчанию. Вызывается методом Dispatch при не нахождении метода-обработчика соответствующего сообщения.

 

Метод NewInstance: TObject; virtual; - Создает экземпляр класса. Разумно использовать эту функцию для клонирования объектов, так как, не зная исходного класса, можно создавать новые экземпляры уже готовых объектов без использования RTTI. (см. так же урок 2)

Метод  FreeInstance; virtual; - Освобождает ресурсы экземпляра. Использование этого метода не приветствуется по причине его тесной взаимосвязи с VMT, то есть перегрузка этого метода должна производиться с большой осторожностью. Вызов же метода напрямую в совокупности с InitInstance может служить для того, чтобы создать экземпляр «в себе», ведь некоторые задачи требуют отката состояния объекта на момент создания. (см. так же урок 2)

Последнее обновление ( 05.06.2013 г. )
 
« След.
 
© 2024 Программирование - это просто
Joomla! - свободное программное обеспечение, распространяемое по лицензии GNU/GPL.
Русская локализация © 2005-2008 Joom.Ru - Русский Дом Joomla!
Design by Mamboteam.com | Powered by Mambobanner.de
Я принимаю Яндекс.Деньги