32 Урока Borland Delphi


Урок 08 - часть 10


и OnDblClick, во многом похожи друг на друга.

Открытость среды Delphi позволяет получать и оперировать информацией особого рода, называемой информацией периода выполнения (RTTI - run-time type information). Эта информация организована в виде нескольких уровней.

Верхний уровеньRTTI представлен как средство проверки и приведения типов с использованием ключевых слов is и as.

Ключевое слово is дает программисту возможность определить, имеет ли данный объект требуемый тип или является одним из наследников данного типа, например, таким образом:

if MyObject is TSomeObj then ...

Имеется возможность использовать RTTI и для процесса приведения объектного типа, используя ключевое слово as:

if MyObject is TSomeObj then

(MyObject as TSomeObj).MyField:=...

что эквивалентно:

TSomeObj(MyObject).MyField:=...

Средний уровень RTTI использует методы объектов и классов для подмены операций as и is на этапе компиляции. В основном, все эти методы заложены в базовом классе TObject, от которого наследуются все классы библиотеки компонент VCL. Для любого потомка TObject доступны, в числе прочих, следующие информационные методы:

  • ClassName - возвращает имя класса, экземпляром которого является объект
  • ClassInfo - возвращает указатель на таблицу с RTTI, содержащей информацию о типе объекта, типе его родителя, а также о всех его публикуемых свойствах, методах и событиях
  • ClassParent - возвращает тип родителя объекта
  • ClassType - возвращает тип самого объекта
  • InheritsFrom - возвращает логическое значение, определяющее, является ли объект потомком указанного класса
  • InstanceSize - возвращает размер объекта в байтах.
Эти методы могут использоваться в Вашем коде напрямую.

Нижний уровень RTTI определяется в дельфийском модуле TypInfo и представляет особый интерес для разработчиков компонент. Через него можно получить доступ к внутренним структурам Delphi, в том числе, к ресурсам форм, инспектору объектов и т.п.

Итак, доступ к информации периода выполнения в Delphi позволяет динамически получать как имя объекта, находящегося на форме, так и название класса, которому он принадлежит (и еще много другой полезной информации; но об этом - в дальнейших уроках). Для этого используется свойство Name, имеющееся у любого класса-наследника TComponent




- Начало -  - Назад -  - Вперед -