Вход


Главная страница >> Учебный процесс >> Конспекты >> Delphi. Библиотека визуальных компонентов VCL >> Структура справочника и соглашения >> Информация о типе времени выполнения (RTTI). >> Операторы is и as
Переход на главную страницу

Сервер поддерживается
кафедрой информатики и вычислительной техники ГрГУ
тел. +375-(0)152-445-101
E-mail :
kadan@grsu.grodno.by


[Назад]    [Содержание ]    [Вперед]

  


Операторы is и as


В языке определены два оператора ? is и as, неявно использующие RTTI. Оператор is предназначен для проверки совместимости по присваиванию экземпляра объекта с заданным классом. Выражение вида

AnObject is TObjectType

принимает значение True только в том случае, если AnObject совместим по присваиванию с TObjectType, то есть является объектом этого класса или одного из порожденных от него классов. Кстати, определенная проверка происходит еще при компиляции: если фактические объект и класс несовместимы, компилятор выдаст ошибку в этом операторе.

Оператор as введен в язык специально для приведения объектных типов. С помощью него можно рассматривать экземпляр объекта как принадлежащий к другому совместимому типу:

with ASomeObject as TAnotherType do ...

От стандартного способа приведения типов с помощью конструкции

TAnotherType(ASomeObject)

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

Очень полезным может быть использование оператора as в методах-обработчиках событий. Для обеспечения совместимости источник события Sender имеет тип TObject, хотя ясно, что реально им может быть форма или другие компоненты. Поэтому, чтобы иметь возможность пользоваться их свойствами, применяют as:

(Sender as TControl).Caption := 'Thanks!';

Некоторым недостатком этих двух операторов является то, что присваиваемый фактически тип должен быть известен на стадии компиляции, поэтому на месте TObjectType и TAnotherType (после as) не может стоять переменная-указатель на класс.



[Назад]    [Содержание ]    [Вперед]

  


Для комментария : kadan@grsu.grodno.by

  
За содержание страницы отвечает Гончарова М.Н.
©
Кафедра СПиКБ, 2002-2017