9.2.3. Одноименные
методы
В отличие от остальных версий Delphi
в версиях 4...6 появилась возможность в рамках одного класса иметь несколько
одноименных
методов. Описанный выше механизм перекрытия родительского
метода одноименным методом потомка приводит к тому, что потомок “не видит” перекрытый
родительский метод и может обращаться к нему лишь с помощью зарезервированного
слова inherited. В Delphi 4 введено зарезервированное слово overload (перезагрузить),
с помощью которого становятся видны одноименные методы как родителя, так и потомка.
При обнаружении одноименного метода
компилятор Delphi предупреждает о том, что у класса уже есть аналогичный метод
с дру
гими параметрами. Для
подавления сообщений объявление одноименного метода можно сопровождать зарезервированным
словом reintrpduce (вновь ввести).
Примечание
Чтобы одноименные методы можно
было отличить друг от друга,каждый из них должен иметь уникальный набор, параметров.
В ходе шлпоянения программы при: обращении к одному, из одноименнх методов
программа проверяет; тип и количество фактических параметров обращения и выбирает
нужный метод
В следующем примере в классе TForm1
используются целых 4 одноименных метода close. Лишь один из них - унаследованный
метод без параметра выполняет свои основные функции - закрывает окно. Три других
отличаются набором параметров и выводят сообщение в заголовок окна.
Поместите на пустую форму четыре
кнопки TButton и напишите такие обработчики их событий OnClick:
procedure
TForm1.ButtonlClick(Sender: TObject);
begin
Close('Строка символов')
end;
procedure
TFormi.Button2Click(Sender:
TObject);
begin
Close(123)
end;
procedure
TFormi.ButtonSClick(Sender:
TObject);
begin
Close (20,300) ;
end;
procedure
TFormi.Button4Click(Sender:
TObject);
begin
Close
end;
Теперь в раздел private класса Tform1
вставьте три таких объявления методов close:
private
{ Private declarations
}
procedure
Close(S:
String);
reintroduce;
overload;
procedure
Close(I:
Integer);
reintroduce;
overload;
procedure
Close(I,J:
Integer);
reintroduce;
overload;
И, наконец, в разделе implementation
поместите описания объявленных методов:
procedure
TForm1.Close(S:
String) ;
begin
Caption := S
end;
procedure
TFormI.Close(I:
Integer);
begin
Caption := IntToStr(I)
end;
procedure
TFormI.close(I,J:
Integers);
begin
Caption := IntToStr(i*j)
end;
Теперь после запуска программы три
первые кнопки будут вызывать методы close класса Tform1 и менять заголовок окна,
в то время как кнопка Button4 обратится к методу close родительского класса
т Form и закроет окно.
include $_SERVER["DOCUMENT_ROOT"]."/cgi-bin/footer.php"; ?>