Type
TmyDateClass=class(TObject)
private
Adate: TdateTime;
…
Public
Procedure SetDate(Val: TDateTime); overload; virtual; // Объявляемвозможностьперегрузки
…
end;
TmySecondDateClass=class(TmyDateClass)
private
Adate: TdateTime;
…
Public
Procedure SetDate(Val: string); reintroduce; overload; // Объявляемвозможностьперегрузки
…
End;Вы можете использовать перегрузку и для процедур и функций необязательно при наследовании, и даже процедур и функций не классового типа, например:
Function Myfunction(Val: string): string; overload;
Begin
Result:=Val+' Ok!'
End;
Function Myfunction(Val: Extended): extended; overload;
Begin
Result:=Val/2;
End;
Или
TmyDateClass=class(Tobject)
private
Adate: TdateTime;
…
Public
Procedure SetDate(Val: TDateTime); overload; // Объявляемвозможностьперегрузки
Procedure SetDate(Val: string); overload; // Объявляемвозможностьперегрузки
…
End;
Параметры по умолчанию
Если Вам нужно создать функцию, которая в качестве параметров почти всегда получает одно и то же значение, но все-таки иногда оно может меняться, то Вам нужно объявить параметры по умолчанию в качестве формальных параметров, например:
Procedure MyProcedure(Val1: Extended; Val2: Integer = 2);
Begin
…
End;
Тогда Вы сможете вызывать ее такими способами:
MyProcedure(42.33); // аналогично MyProcedure(42.33, 2);
MyProcedure(15.6, 8);
Правило гласит, что все параметры по умолчанию должны быть сосредоточены в конце списка формальных параметров процедуры или функции. Опускать параметры по умолчанию, можно только начиная с конца списка, поэтому нужно упорядочивать параметры по умолчанию по степени важности.
Делегирование
Событие - это свойства процедурного типа, предназначенные для создания пользовательской реакции на внешние воздействия. События в Delphi реализуется за счет создания поля процедурного типа и объявления соответствующего свойства класса, например:
Type
TmyEvent = procedure(Sender: Tcomponent); of object; // определениепроцедурноготипа
TmyClass=class(Tcomponent)
Private
FmyEvent: TmyEvent;
Protected
Procedure DoMyEvent;
published
property OnMyEvent: TmyEvent read FmyEvent write FmyEvent;
end;
Допустим, Вы определили функцию function MyProcedure(Sender: Tcomponent) для обработки события с помощью инспектора объектов или написали вручную и налету присвоили объекту: MyClass.OnMyEvent:=MyProcedure. При наступлении определенных условий Ваш класс может вызвать процедуру DoMyEvent, где будет вызвана Ваша процедура MyProcedure так:
Procedure TmyClass .DoMyEvent;
Begin
If Assigned(FmyEvent) then FmyEvent(Self);
End;Мы видим, что был проверен указатель на пользовательскую процедуру обработки события, и если он действителен, то вызывается пользовательская процедура - это и есть делегирование. Обратите внимание, что я разместил свойство OnMyEvent в секции published для того, чтобы программист мог воспользоваться инспектором объектов для написания процедуры обработки события.
Список литературы
Банников. Н.А. Объектно-ориентированный подход к программированию.