Metody statyczne


Metody domyślnie są statyczne. Kiedy statyczna metoda jest wywoływana, deklarowany typ klasy lub zmienna obiektowa użyta w wywołaniu metody determinuje która implementacja jest aktywowana. Jest to ustalone już w czasie kompilacji. W następującym przykładzie, metoda Draw jest statyczna.

type
  TFigure = class
    procedure Draw;
  end;
  TRectangle = class(TFigure)
    procedure Draw;
  end;

Mając te deklaracje, następujący kod ilustruje efekt wywołania metody statycznej. W drugim wywołaniu Figure.Draw, zmienna Figure reprezentuje obiekt klasy TRectangle, ale wywołanie uruchamia implementację metody Draw klasy TFigure, ponieważ zadeklarowano zmienną Figure jako TFigure.

var
  Figure: TFigure;
  Rectangle: TRectangle;
begin
  Figure := TFigure.Create;
  Figure.Draw;                    // aktywuje TFigure.Draw
  Figure.Destroy;
  Figure := TRectangle.Create;
  Figure.Draw;                    // aktywuje TFigure.Draw
  TRectangle(Figure).Draw;        // aktywuje TRectangle.Draw
  Figure.Destroy;
  Rectangle := TRectangle.Create;
  Rectangle.Draw;                 // aktywuje TRectangle.Draw
  Rectangle.Destroy;
end;