Разное
Облака / Clouds
The bast cloud service
Get 20 GB free!!!
Support WebDav.
Show more >>
time-tested cloud storage
Support WebDav.
Последние книги
Самое популярное
Все бесплатно
Все ссылки на файлы, расположенные на страницах сайта, добавлены пользователями и доступны для бесплатного скачивания. За содержание этих файлов администрация сайта ответственности не несет.
Навигация
Вопросы
Компонент MainMenu
Категория: Компоненты
Категория: Компоненты
Удаление файла в корзину
Категория: Файловая система
Категория: Файловая система
BDE. Расположение БД по псевдониму
Категория: Базы данных
Категория: Базы данных
Загрузка файлов в THTMLViewer и TFrameBrowser
Категория: Интернет и Сети
Категория: Интернет и Сети
Преобразовать Римские символы в Арабские и наоборот
Категория: Текст и строки
Категория: Текст и строки
Числовой формат ячейки в Excel
Категория: Базы данных
Категория: Базы данных
Вывод текста на канву Canvas
Категория: Компоненты
Категория: Компоненты
Как получить размер текстового файла, не открывая его
Категория: Текст и строки
Категория: Текст и строки
Перегенерировать все индексы Dbase
Категория: Базы данных
Категория: Базы данных
Упаковать *.mdb-файл
Категория: Базы данных
Категория: Базы данных
Delphi - Справочник: Overload
Overload
|
Subroutine declaration; Overload; {Other directives...} |
Деректива (Unit )
|
Позволяет 2-м или более подпрограммам иметь одинаковое название
|
Описание:
|
Директива Overload позволяет Вам иметь различные версии одинаково названной функции или процедуры с различными параметрами. Это полезно, когда есть множество путей, которыми код может захотеть использовать подпрограмму. Например, если подпрограмма - конструктор класса, Вы можете хотеть иметь одну версию Create, которая устанавливает значения по умолчанию, и другую, которая берет эти значения как параметры. Вы должны закодировать директиву Overload перед любыми другими директивами. При запросе перезагруженной (overloaded) подпрограммы, Delphi выбирает соответствующую версию, основанную сначала на номере параметров, затем на типах параметра. Если он не может принять решение, он выдаёт исключение. Когда количество параметров такое же, он всегда сначала пробует удовлетворить самые простые/наименьшие типы данных - например, вышеупомянутое значение 23 удовлетворил бы параметр Byte, чем Integer параметр. Иногда, Вы можете избежать потребности в перезагрузке, давая значения конечных параметров по умолчанию. Вызывающая программа может тогда вызвать с или без этих конечных параметров. procedure MyProc(a : Byte; b : Byte = 23); Может быть вызвана 2-мя способами: MyProc(15, 16); MyProc(45); // Defaults b to value 23 Перегрузка не ограничена методами класса. В строках функций и процедур может быть подобно перезагружено. |
Пример кода: Пример
|
//Пример кода : Две версии класса constructor // Полный код Модуля. // ----------------------------------------------------------- // Вы должны поместить этот код в модуль с именем Unit1 и с формой // названную Form1, которая имеет событие OnCreate названное FormCreate. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type // Класс с перезагруженными методами TRectangle = class private coords: array[0..3] of Integer; public constructor Create(left, top, right, bottom : Integer); Overload; published // Только одна версия перезагруженного метода может быть published constructor Create(topLeft, bottomRight : TPoint); Overload; end; // Сам класс формы TForm1 = class(TForm) procedure FormCreate(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} // Версия 1 конструктора: берет целые числа как значения координат constructor TRectangle.Create(left, top, right, bottom: Integer); begin // Сохранение переданных значений coords[0] := left; coords[1] := top; coords[2] := right; coords[3] := bottom; end; // Версия 2 конструктора: берет точки как значения координат constructor TRectangle.Create(topLeft, bottomRight: TPoint); begin // Сохранение переданных значений coords[0] := topLeft.X; coords[1] := topLeft.Y; coords[2] := bottomRight.X; coords[3] := bottomRight.Y; end; // Основная линия кода procedure TForm1.FormCreate(Sender: TObject); var rect1, rect2 : TRectangle; point1, point2 : TPoint; begin point1 := Point(122,133); point2 := Point(144,155); // Создание двух прямоугольников, используя два различных конструктора rect1 := TRectangle.Create(22, 33, 44, 55); rect2 := TRectangle.Create(point1, point2); end; end. //Пример кода : Иллюстрация, как Delphi выбирает подпрограммы согласно значению параметра // Полный код Модуля. // ----------------------------------------------------------- // Вы должны поместить этот код в модуль с именем Unit1 и с формой // названную Form1, которая имеет событие OnCreate названное FormCreate. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type // Сам класс формы TForm1 = class(TForm) Button1: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin form1.close; end; // В строке перезагруженных функций function MaxValue(a, b : Byte) : string; Overload; begin if a > b then ShowMessageFmt('%d byte > %d',[a,b]) else ShowMessageFmt('%d byte <= %d',[a,b]); end; function MaxValue(a, b : Integer) : string; Overload; begin if a > b then ShowMessageFmt('%d integer > %d',[a,b]) else ShowMessageFmt('%d integer <= %d',[a,b]); end; function MaxValue(a, b : Extended) : string; Overload; begin if a > b then ShowMessageFmt('%f extended > %f',[a,b]) else ShowMessageFmt('%f extended <= %f',[a,b]); end; function MaxValue(a, b : string) : string; Overload; begin if a > b then ShowMessageFmt('''%s'' string > ''%s''',[a,b]) else ShowMessageFmt('''%s'' string <= ''%s''',[a,b]); end; // Основная линия кода procedure TForm1.FormCreate(Sender: TObject); begin // Демонстрация различных вызовов, используя то же самое название MaxValue(15 , 23); MaxValue(1500, 23); MaxValue(15.0, 23.0); MaxValue('15', '23'); end; end.
Результат:
|
Программа выполняется без какого-либо вывода 15 byte <= 23 1500 integer > 23 15.0 extended <= 23.0 '15' string <= '23' |