|
||||||||
|
Операторы is и as
В языке определены два оператора ? is и as, неявно использующие RTTI. Оператор is предназначен для проверки совместимости по присваиванию экземпляра объекта с заданным классом. Выражение вида
принимает значение True только в том случае, если AnObject совместим по присваиванию с TObjectType, то есть является объектом этого класса или одного из порожденных от него классов. Кстати, определенная проверка происходит еще при компиляции: если фактические объект и класс несовместимы, компилятор выдаст ошибку в этом операторе. Оператор as введен в язык специально для приведения объектных типов. С помощью него можно рассматривать экземпляр объекта как принадлежащий к другому совместимому типу:
От стандартного способа приведения типов с помощью конструкции
использование оператора as отличается наличием проверки на совместимость типов во время выполнения (как в операторе is): попытка приведения к несовместимому типу приводит к возникновению исключительной ситуации EInvalidCast (см. ниже). После применения оператора as сам объект остается неизменным, но вызываются те его методы, как если бы он принадлежал к присваиваемому классу. Очень полезным может быть использование оператора as в методах-обработчиках событий. Для обеспечения совместимости источник события Sender имеет тип TObject, хотя ясно, что реально им может быть форма или другие компоненты. Поэтому, чтобы иметь возможность пользоваться их свойствами, применяют as:
Некоторым недостатком этих двух операторов является то, что присваиваемый фактически тип должен быть известен на стадии компиляции, поэтому на месте TObjectType и TAnotherType (после as) не может стоять переменная-указатель на класс.
Для комментария : kadan@grsu.grodno.by | ||||||||||
За содержание страницы отвечает Гончарова М.Н. © Кафедра СПиКБ, 2002-2017 |