|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Перегрузить конструктор
Создаю свой класс на основе TComponent (constructor Create(AOwner: TComponent); virtual;) в конструктор нужно добавить еще один параметр
Код:
type TFB2File = class(TComponent) private FFileName: String; public constructor Create(AOwner: TComponent; const FileName: String); override; property FileName: String read FFileName; end; |
#2
|
|||
|
|||
Например так
Код:
type TFB2File = class(TComponent) private FFileName: String; public constructor CreateFromFile(AOwner: TComponent; const AFileName: String);overload; property FileName: String read FFileName; end; Код:
constructor TFB2File.CreateFromFile(AOwner: TComponent; const AFileName: String); begin inherited Create(AOwner); FFileName:=AFileName; end; Код:
constructor Create(AOwner: TComponent);override; |
Этот пользователь сказал Спасибо icWasya за это полезное сообщение: | ||
Помидоркин (27.03.2015)
|
#3
|
||||
|
||||
так:
Код:
type TZzzComponent = class(TComponent) private FParam: string; public property Param: string read FParam; constructor Create(AOwner: TComponent; const AParam: string); reintroduce; end; ... { TZzzComponent } constructor TZzzComponent.Create(AOwner: TComponent; const AParam: string); begin inherited Create(AOwner); FParam:=AParam; end; использование: Код:
TZzzComponent.Create(Self, 'hello world'); Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
Помидоркин (27.03.2015)
|
#4
|
||||
|
||||
Цитата:
В случае с перегрузкой, не обязательно inherited, достаточно вызвать перегруженный конструктор. — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#5
|
|||
|
|||
Цитата:
Так что вызывать его обязательно. |
#6
|
||||
|
||||
inherited передает управление в конструктор предка; в данном случае конструктор перегружен, второй перегруженный конструктор и есть предковый, так что inherited не обязателен.
Тем более, у тебя оверлоад, а не реинтродьюс; вот при реинтродьюсе нужен inherited. — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#7
|
||||
|
||||
Ничто не мешает из одного конструктора вызвать другой.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#8
|
|||
|
|||
Цитата:
Нам, а не подскажешь, с какой версии ввели reintroduce? |
#9
|
||||
|
||||
Цитата:
Не стоит путать форумы с богадельнями. © Bargest |
#10
|
||||
|
||||
с ходу не могу сказать. да и проверить сейчас только минимум на Delphi 7 есть возможность. старенькие версии (Delphi 4, 5, 6) дома на архивных болванках есть, но нужно время их найти, установить.
Пишу программы за еду. __________________ |