Обновление: выпотрошил вопрос более простым примером, на который нет ответа согласно первоначально принятому ответу
Учитывая следующий класс и его предок:
TComputer = class(TObject)
public
constructor Create(Teapot: string='');
end;
TCellPhone = class(TComputer)
public
constructor Create(Cup: Integer); overload; virtual;
constructor Create(Cup: Integer; Teapot: string); overload; virtual;
end;
Прямо сейчас TCellPhone
имеет 3 видимых конструктора:
Что мне делать с TCellPhone
, чтобы конструктор предка ( Teapot: string = ''
) не был виден, оставив только объявленные конструкторы:
Примечание : Обычно простое действие , имеющее конструктор-потомок, скрывает предка:
TCellPhone = class (TComputer) общественный конструктор Create (Cup: Integer); виртуальный; конец;
- Чашка: целое число
И если вы хотите, чтобы сохранил оба конструктор предка и потомок, вы бы отметили потомок как
перегрузка
:TCellPhone = class (TComputer) общественный конструктор Create (Cup: Integer); перегрузка; виртуальный; конец;
- Чашка: Целое число
- Teapot: string = ''
В примере кода этого вопроса Delphi ошибочно принимает мои перегрузку
ключевые слова:
TCellPhone = class(TComputer)
public
constructor Create(Cup: Integer); overload; virtual;
constructor Create(Cup: Integer; Teapot: string); overload; virtual;
end;
, полагая, что:
Как мне скрыть конструктор предка?
Примечание: Это может невозможно скрыть невиртуальный конструктор-предок, используя язык Delphi, как он определен в настоящее время. «Невозможно» является допустимым ответом.
i попробовала пометить конструкторы-потомки с помощью reintroduce
(возврат к мой режим случайного добавления ключевых слов, пока он не сработает):
TCellPhone = class(TComputer)
public
constructor Create(Cup: Integer); reintroduce; overload; virtual;
constructor Create(Cup: Integer; Teapot: string); reintroduce; overload; virtual;
end;
Но это не сработало, все три конструктора все еще видны.
TCellPhone.Create(PowerCord: TPowercord)
begin
raise Exception.Create('Don''t use.');
end;
Но разработчики не поймут, что вызывают не тот конструктор, пока заказчик однажды не обнаружит ошибку и не оштрафует нас на миллиарды долларов. Фактически, я пытаюсь найти везде, где вызываю неправильный конструктор, но я не могу понять, как заставить Delphi сказать мне!