function TIntegerField.GetData;
begin
GetData:= IntToStr(Data);
end;
function TExtendedField.GetData;
begin
GetData:= IntToStrF(Data, ffFixed, 7, 2);
end;
…
procedure ShowData(AField: TField);
begin
Form1.Label1.Caption:= AField.GetData;
end;
В этом примере классы содержат разнотипные данные, которые "умеют" только сообщить о значении этих данных текстовой строкой (при помощи метода GetData). Внешняя по отношению к ним процедура ShowData получает объект в виде параметра и показывает эту строку.
Правила контроля соответствия типов
Но какой (точнее, чей) метод GetData при этом будет вызван? Тот, который соответствует классу фактически переданного объекта. Этот принцип называется
Если такую процедуру скомпилировать и поместить в динамическую библиотеку, то эту библиотеку можно будет раз и навсегда использовать без изменений, хотя будут появляться и новые, неизвестные в момент ее создания классы-потомки TField!
Наглядный пример использования полиморфизма дает сама Delphi. В ней имеется класс TComponent, на уровне которого сосредоточены определенные "правила" того, как взаимодействовать со средой разработки и с другими компонентами. Следуя этим правилам, можно порождать от TComponent свои компоненты, настраивая Delphi на решение специальных задач.
8. ОБРАБОТКА СООБЩЕНИЙ
Потребность в динамических методах особенно ощутима при разработке объектов, соответствующих элементам интерфейса Windows, когда каждый из большой иерархии объектов содержит обработчики десятков разнообразных сообщений.
Методы, предназначенные специально дня обработки сообщений Windows, составляют подмножество динамических методов и объявляются директивой
type
TMyControl = class(TWinControl)
procedure WMSize(var Message: TWMSize);
message WM_SIZE;
end;
type
TMyOtherControl = class(TMyControl)
procedure Resize(var Info);
message WM_SIZE;
end;
Для перекрытия методов-обработчиков сообщений директива override не используется. В этом случае нужно сохранить в описании директиву message с индексом метода.
Необходимости изобретать собственные структуры, по-своему интерпретирующие содержание того или иного сообщения, нет: для большинства сообщений Windows типы уже описаны в модуле MESSAGES.
В обработчиках сообщений (и только в них) можно вызвать метод-предок, просто указав ключевое слово
9. СОБЫТИЯ И ДЕЛЕГИРОВАНИЕ
Работать с большим количеством сообщений, даже имея под рукой справочник, нелегко, поэтому одним из больших достижений Delphi является то, что программист избавлен от необходимости работать с сообщениями Windows (хотя такая возможность у него есть). Стандартных событий в Delphi не более двух десятков, и все они имеют простую интерпретацию, не требующую глубоких знаний среды.
Рассмотрим, как реализованы события на уровне языка Object Pascal. События — это свойства процедурного типа, предназначенные для создания пользовательской реакции на те или иные входные воздействия:
property OnMyEvent: TMyEvent read FonMyEvent
write FonMyEvent;
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии