Операция is
предназначена для проверки того, имеет ли
классовая переменная указанный динамический тип.
Операция as
позволяет безопасно преобразовать переменную
одного классового типа к другому классовому типу (в отличие от
явного приведения классового типа).
Операция
is
имеет вид:
a is
ClassType
и возвращает True
если
a
принадлежит к классу ClassType
или одному из его потомков.
Например, если Base
и Derived
- классы, причем,
Derived
- потомок Base
,
переменные b и d имеют соответственно типы Base
и Derived
, то выражения
b is Base
и d is
Base
возвращают True
,
а b is Derived
- False
.
Операция
as
имеет вид:
a as
ClassType
и возвращает ссылку на объект типа
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;