Konstruktory i odwołania do klas


Konstruktor może być wywołany przez użycie zmiennej o typie odwołania klasowego. To umozliwia konstrukcję obiektów, których typ nie jest znany w czasie kompilacji. Przykład:

type TControlClass = class of TControl;
function CreateControl(ControlClass: TControlClass;
    const ControlName: string; X, Y, W, H: Integer): TControl;
begin
  Result := ControlClass.Create(MainForm);
  with Result do
  begin
    Parent := MainForm;
    name := ControlName;
    SetBounds(X, Y, W, H);
    Visible := True;
  end;
end;

Funkcja CreateControl wymaga parametru typu odwołania klasowego do uzyskania informacji jaki rodzaj kontrolki ma wykreować. Funkcja używa tego parametru do wywołania konstruktora klasy. W wywołaniu CreateControl można wyspecyfikować identyfikator klasy do wykreowania jej egzemplarza. Przykład:

CreateControl(TEdit, 'Edit1', 10, 10, 100, 20);

Konstruktory wywoływane przez użycie odwołań klasowych są zwykle wirtualne. Implementacja konstruktora aktywowanego w wywołaniu zależy od typu odwołania klasowego w czasie wykonania programu.