Delphi: Как добавить другой конструктор к потомку?

Обновление: Пример, который я изначально имел, был довольно сложным. Вот простой 8-строчный пример, который объясняет все в одном блоке кода. не компилируется выдает предупреждение:

TComputer = class(TObject)
public
    constructor Create(Cup: Integer); virtual;
end;

TCellPhone = class(TComputer)
public
    constructor Create(Cup: Integer; Teapot: string); virtual;
end;

Примечание: Этот вопрос является частью третьей в моей текущей серии вопросов о тонкостях конструкторов в Delphi

Исходный вопрос

Как я могу добавить конструктор к существующему классу?

Давайте дадим гипотетический пример (то есть тот, который я набираю здесь в редакторе SO, чтобы он мог или не мог компилироваться):

TXHTMLStream = class(TXMLStream)
public
   ...
end;

Далее предположим, что нормальное использование TXHTMLStream требовал выполнения большого количества повторяющегося кода, прежде чем его можно было использовать:

var
   xs: TXHTMLStream;
begin
   xs := TXHTMLStream.Create(filename);
   xs.Encoding := UTF32;
   xs.XmlVersion := 1.1;
   xs.DocType := 'strict';
   xs.PreserveWhitespace := 'true';
   ...

   xs.Save(xhtmlDocument);

Предположим, я хочу создать конструктор, который упрощает весь этот шаблонный установочный код:

TXHTMLStream = class(TXMLStream)
public
    constructor Create(filename: string; Encoding: TEncoding); virtual;
end;

constructor TXHTMLStream.Create(filename: string; Encoding: TEncoding);
begin
   inherited Create(filename);
   xs.Encoding := Encoding;
   xs.XmlVersion := 1.1;
   xs.DocType := 'strict';
   xs.PreserveWhitespace := True;
   ...
end;

Это упрощает использование объекта до:

var
   xs: TXHTMLStream;
begin
   xs := TXHTMLStream.Create(filename, UTF32);
   xs.Save(xhtmlDocument);

За исключением того, что теперь Delphi жалуется, что мой новый конструктор скрывает старый конструктор.

Метод 'Create' скрывает виртуальный метод базового типа 'TXMLStream'

я, конечно же, не имел в виду , чтобы скрыть создание предка - я хочу оба.

Как добавить конструктор (с другой ] сигнатурой) к классу-потомку, сохранив конструктор предка, чтобы его можно было использовать?

8
задан Ian Boyd 6 October 2010 в 20:34
поделиться