Delphi: Как добавить другой конструктор к потомку?
Обновить: Пример, который я первоначально имел, был довольно сложным. Вот простой пример из 8 строк, который объясняет все в одном блоке кода. Следующиене компилируется выдает предупреждение:
TComputer = class(TObject)
public
constructor Create(Cup: Integer); virtual;
end;
TCellPhone = class(TComputer)
public
constructor Create(Cup: Integer; Teapot: string); virtual;
end;
Замечания: Этот вопрос является частью 3 в моей продолжающейся серии вопросов о тонкостях конструкторов в 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 жалуется, что мой новый конструктор скрывает старый конструктор.
Метод «Создать» скрывает виртуальный метод базового типа «TXMLStream»
я конечно не сделалимею в виду чтобы спрятать предка создать - яхочу и то и другое.
Как добавить конструктор (сразные подпись) к классу-потомку, сохраняя при этом конструктор предка, чтобы он все еще мог использоваться?