Deklaracja Forward i wzajemna zależność klas


Jeśli deklaracja klasy kończy się słowem class i średnikiem, czyli jeśli ma postać:

type className = class;

bez klasy przodka i bez składników — wtedy jest to deklaracja forward. Deklaracja taka musi być rozwiązana przez zdefiniowanie deklaracji tej samej klasy wewnątrz tej samej sekcji deklaracji. Inaczej mówiąc, między deklaracją forward i jej definicją deklaracji, nie może się znaleźć nic innego niż deklaracje typów.

Deklaracja forward pozwala na wzajemną zależność klas. Przykład:

type
  TFigure = class;  // deklaracja forward
  TDrawing = class
    Figure: TFigure;
     ...
  end;

  TFigure = class  // definicja deklaracji
    Drawing: TDrawing;
     ...
  end;

Nie należy mylić deklaracji forward z z kompletną deklaracją typu potomnego klasy TObject bez deklarowania składników.

type
  TFirstClass = class;           // to jest deklaracja forward
  TSecondClass = class           // to jest kompletna deklaracja klasy
  end;                             //

  TThirdClass = class(TObject);  // to jest kompletna deklaracja klasy