Операции is и as

// Старый текст

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

Если a1 - переменная классового типа, а B - тип класса, то выражение a1 is B возвращает True если переменная a1 имеет динамический тип, совпадающий с B или являющийся одним из его потомков, и False в противном случае. Например:

type
  A = class
  end;

  B = class(A)
  end;
var
a1: A;
...
a1 := B.Create;
writeln(a1 is B); // True

Если a1 - переменная классового типа, а B - тип класса, то выражение a1 as B возвращает объект класса B, a1 имеет динамический тип B или производный от него и nil в противном случае. Например:

var b1: B;
...
b1 := a1 as B;

Фактически последняя строка делает то же, что и следующий фрагмент кода:

if a1 is B then
  b1 := B(a1)
else b1 := nil;