PascalABC.NET

Предварительное объявление классов

Два или более класса могут содержать в качестве полей объекты других классов, циклически ссылающиеся друг на друга.

Например:

type   AAA = class
    b: BBB;
  end;
  BBB = class
    a: AAA;
  end;

Данный код вызовет ошибку компиляции, поскольку тип BBB в момент описания поля b еще не определен. В такой ситуации следует воспользоваться предварительным описанием класса в виде

ИмяКласса = class;

Предварительно описанный класс должен быть полностью описан в той же секции type:

type
  BBB = class;
  AAA = class
    b: BBB;
  end;
  BBB = class
    a: AAA;
  end;