Статические методы

Вверх  Предыдущий  Следующий

Статические методы это методы, которые были объявлены без ключевых слов abstract (абстрактные) или virtual (виртуальные). При вызове статического метода, используется объявленный (т.е. во время компиляции) метод объекта. Для примера, рассмотрим следующие объявления:

Type

TParent = Object

  ...

  procedure Doit;

  ...

  end;

PParent = ^TParent;

TChild = Object(TParent)

  ...

  procedure Doit;

  ...

  end;

PChild = ^TChild;

Как видно, оба объекта родитель и ребенок имеют метод, называемый DoIt. Рассмотрим следующие объявления и вызовы:

Var

ParentA,ParentB : PParent;

Child : PChild;

begin

  ParentA := New(PParent,Init);

  ParentB := New(PChild,Init);

  Child := New(PChild,Init);

  ParentA^.Doit;

  ParentB^.Doit;

  Child^.Doit;

Из трех вызовов DoIt, только последний вызовет TChild.Doit, а два других вызовут TParent.Doit. Это происходит потому, что для статических методов, компилятор во время компиляции, определяет, какие методы должны быть вызваны. Переменная ParentB имеет тип TParent, компилятор решает, что должен быть вызван метод TParent.Doit, даже если она будет создана как TChild. Могут быть случаи, когда вызываемый метод, должен зависеть от фактического типа объекта во время выполнения. Если да, метод не может быть статическим, он должен быть виртуальным методом.