Delphi: Как скрыть конструкторы-предки?

Обновление: выпотрошил вопрос более простым примером, на который нет ответа согласно первоначально принятому ответу

Учитывая следующий класс и его предок:

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 видимых конструктора:

  • Cup: Integer
  • Cup: Integer; Чайник: string
  • Чайник: string = ''

Что мне делать с TCellPhone , чтобы конструктор предка ( Teapot: string = '' ) не был виден, оставив только объявленные конструкторы:

  • Cup: Integer
  • Cup: Integer; Чайник: строка

Примечание : Обычно простое действие , имеющее конструктор-потомок, скрывает предка:

 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 сказать мне!

11
задан Ian Boyd 7 October 2010 в 15:57
поделиться