Операция is предназначена для проверки того, имеет ли
классовая переменная указанный динамический тип.
Операция as позволяет безопасно преобразовать переменную
одного классового типа к другому классовому типу (в отличие от
явного приведения классового типа).
Операция
is имеет вид:
a isClassType
и возвращает True если
a принадлежит к классу ClassType
или одному из его потомков.
Например, если Base
и Derived - классы, причем,
Derived - потомок Base,
переменные b и d имеют соответственно типы Base
и Derived, то выражения
b is Base и d is
Base возвращают True,
а b is Derived - False.
Операция
as имеет вид:
a asClassType
и возвращает ссылку на объект типа
ClassType если преобразование возможно, в
противном случае возвращает nil.
Например, в программе
type
Base = class
end;
Derived = class(Base)
procedure p;
begin
end;
end;
var b: Base;
begin
b := new Base;
writeln(b is Derived);
b := new Derived;
writeln(b is Derived);
end.
первый раз выводится False,
второй - True.
Операции is и
as используются для работы с
переменной базового класса, содержащей объект производного класса.
1 способ.
if b is Derived then
Derived(b).p;
2 способ.
var d: Derived := b as Derived;
d.p;