Delphi Изнутри. Урок 11. Класс TObject. |
Автор megabax | ||
13.10.2011 г. | ||
Delphi Изнутри. Урок 11. Класс TObject.На прошлом уроке мы изучили метод MethodAddress. Сегодня изучим метод MethodName, который делает прямо противоположное - по адресу метода определяет его имя. Например, если вы запустите вот такой код:
То увидите вот такое сообщение:
Функция 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).
Метод Dispatch(var Message); virtual; - Вследствие использования
Windows в качестве базовой платформы разработчики решили не проходить мимо
основного способа обработки межобъектного взаимодействия - системы сообщений.
Этот способ как раз и реализуется этим методом. Весьма разумно было поместить
его именно в TObject, ведь он является базовым для всех классов, определенных в
рамках объектной модели Delphi. Этот метод сканирует VMT на наличие обработчика
сообщения, ID которого указан в первых 4 байтах (длинное слово,Cardinal)
параметра Message и если не находит, то вызывает DefaultHandler. То есть можно
отлавливать события, происходящие не только у элементов управления, но и у
классов низшей иерархии.
Метод NewInstance: TObject; virtual; - Создает экземпляр класса. Разумно
использовать эту функцию для клонирования объектов, так как, не зная исходного
класса, можно создавать новые экземпляры уже готовых объектов без использования
RTTI.
(см. так же урок 2) |
||
Последнее обновление ( 05.06.2013 г. ) |
« След. |
---|