Динамические
методы
Динамические методы похожи
на виртуальные, они также могут быть перегружены. Основная разница между виртуальными
и динамическими методами — в способе их вызова. Если для виртуальных методов
строится таблица виртуальных методов, то каждому динамическому методу присваивается
уникальное число-идентификатор, после чего строится таблица динамических
методов (Dynamic Method Table), в которую заносится данное число, а также
адрес метода. Еще одно отличие динамических методов от виртуальных заключается
в том, что таблицы динамических методов содержат методы только одного компонента
или класса (не включая его предков). Поэтому существенно экономится память,
но замедляется время работы, т. к. для поиска адреса метода обычно приходится
просматривать несколько таблиц динамических методов.
Описание динамического
метода может выглядеть так:
type
TComponent = class
procedure MyProcedure; dynamic; end;
Методы-сообщения
Методы-сообщения не вызываются
из программы непосредственно, как другие методы. Этот тип методов предназначен
для того, чтобы выполнить какие-либо действия в ответ на сообщение операционной
системы. В качестве примера рассмотрим описание метода-сообщения:
type TComponent = class
procedure MyProcedure(Var A: TMessage); message wm_MessageWindows; end;
После служебного слова
message
ставится значение (в нашем случае wm_MessageWindows
),
которое определяет сообщение операционной системы, в ответ на которое будет
вызван метод MyProcedure
.
Виртуальные и динамические
методы могут быть замещенными (overriden) или абстрактными (abstract).