Самоучитель по Delphi 7 для профессионалов


Методы - часть 3


Динамические методы вызываются медленнее, но позволяют более экономно расходовать память. Каждому динамическому методу системой присваивается уникальный индекс. В таблице динамических методов класса хранятся индексы и адреса только тех динамических методов, которые описаны в данном классе. При вызове динамического метода происходит поиск в этой таблице; в случае неудачи просматриваются таблицы DMT всех классов-предков в порядке иерархии и, наконец, класс TObject, где имеется стандартный обработчик вызова динамических методов. Экономия памяти налицо.

Для перекрытия и виртуальных, и динамических методов служит директива override, с помощью которой (и только с ней!) можно переопределять оба этих типа методов. Приведем пример:

type

TFirstClass = class

  FMyFieldl: Integer;

 FMyField2: Longint;

 procedure StatMethod; 

procedure VirtMethodl; virtual; 

procedure VirtMethod2; virtual;

 procedure DynaMethodl; dynamic;

 procedure DynaMethod2; dynamic;

  end;

TSecondClass = class(TMyObject)

procedure StatMethod;

procedure VirtMethodl; override;

procedure DynaMethodl; override;

  end; 

var

Objl: TFirstClass;

Obj2: TSecondClass;

Первый из методов в примере создается заново, остальные два — перекрываются. Попытка применить директиву override к статическому методу вызовет ошибку компиляции.

 Примечание 

Будьте внимательны: попытка перекрытия с директивой не override, a virtual или dynamic приведет на самом деле к созданию нового одноименного метода.

 




Начало  Назад  Вперед