PascalABC.NET

Операция 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;