Главная » Delphi » Информация о типах времени выполнения

0

Информация о типах  времени выполнения (RTTI —  Runtime Type  Information) пред ставляет собой  способность языка  предоставлять приложениям  Delphi информа цию  об объектах непосредственно во время  выполнения программы. Эта же функ ция используется для обмена  информацией между компонентами Delphi  и графиче ской средой разработки.

Будучи потомками класса  TObject, все объекты Object Pascal содержат указатель на информацию о типе  и некоторые встроенные методы  для работы с ней,  обеспечи вающие  функциональные возможности RTTI. Ниже  приведены некоторые методы класса TObject, предназначенные для получения информации о конкретном экземп ляре объекта.Таблица 2.7. Методы класса TObject, используемые для RTTI

Функция

Возвращаемый тип

Информация

ClassName()

string

Имя класса объекта

ClassType()

TClass

Тип объекта

InheritsFrom()

Boolean

Логический  индикатор  (Boolean)  проис

хождения одного  класса от другого

ClassParent()

TClass

Тип базового класса

InstanceSize()

word

Размер  экземпляра в байтах

ClassInfo()

Pointer

Указатель на RTTI объекта в памяти

Object Pascal обладает двумя операторами — is и as, — которые позволяют прово

дить сравнение и преобразование типов с помощью  средств  RTTI.

Оператор as позволяет привести объект базового класса к типу производного (при невозможности такого  преобразования будет  передано исключение). Предположим, что  существует  процедура, которой может  быть  передан в качестве параметра объект любого типа. Ниже приведен возможный вариант объявления такой процедуры:

Procedure Foo(AnObject: TObject);

Если необходимо не только  получить объект в качестве параметра, а и сделать  с его помощью нечто полезное, то потребуется привести его к типу производного клас са,  обладающего  необходимыми  возможностями.  Предположим,  что   полученный объект AnObject опознан как производный от класса TEdit и необходимо изменить текст,   содержащийся  в  этом  объекте.  (В  Delphi   класс  TEdit является элементом управления VCL, представляющим собой  окно  текстового редактора.) Для него  мож но воспользоваться таким кодом:

(Foo as TEdit).Text := ‘Hello World.';

Кроме  того,  для непосредственного сравнения типов  объектов можно  использовать оператор is. Этот оператор позволяет сравнить характеристики неизвестного объекта с характеристиками известного типа данных  или экземпляра объекта. На основе такого сравнения можно  будет сделать  выводы  о возможных свойствах и поведении неизвест ного  объекта. Так,  до выполнения приведения типа  (см. предыдущий пример) можно проверить, является ли полученный объект AnObject совместимым с классом TEdit:

If (Foo is TEdit) then

TEdit(Foo).Text := ‘Hello World.';

Обратите внимание, что в данном  примере во второй строке вместо  оператора as использовано стандартное приведение типа.  Это сделано  для повышения эффектив ности  работы программы, поскольку  в первой строке было уже установлено, что  тип объекта Foo относится к TEdit, и дополнительная проверка допустимости преобра зования, выполняемая при использовании оператора as, уже не нужна.

Резюме

В этой  главе  рассматривался базовый синтаксис и семантики языка  Object  Pascal, включая  переменные, операторы, функции, процедуры, типы  данных, конструкции и стили  программирования. Кроме  того,  обсуждалась  концепция объектно ориентиро ванного программирования, в том числе  понятия объектов, полей, свойств, методов, интерфейсов, обработки исключений, RTTI,  а также  базовый для всех классов  Delphi класс TObject.

Теперь, имея  общее  представление об  объектно ориентированном языке  Object

Pascal и его работе, можно  перейти к обсуждению приложений Delphi  и концепциям их разработки.

Источник: Тейксейра, Стив, Пачеко, Ксавье.   Borland Delphi 6. Руководство разработчика. : Пер.  с англ. — М. : Издательский дом “Вильямс”, 2002. —  1120 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии