Delphi: Wie füge ich einem Nachkommen einen anderen Konstruktor hinzu?

Aktualisieren Das Beispiel, das ich ursprünglich hatte, war irgendwie komplex. Hier ist ein einfaches 8-zeiliges Beispiel, das alles in einem Codeblock erklärt. Folgendekompiliert nicht gibt eine Warnung aus:

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

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

Hinweis Diese Frage ist Teil 3 meiner fortlaufenden Reihe von Fragen zu den Feinheiten von Konstruktoren in Delphi

Ursprüngliche Frage

Wie kann ich einer vorhandenen Klasse einen Konstruktor hinzufügen?

Lassen Sie uns ein hypothetisches Beispiel geben (d. H. Eines, das ich hier im SO-Editor eingebe, damit es kompilieren kann oder nicht):

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

Weiter angenommen, dass die normale Verwendung vonTXHTMLStream bedeutete, dass viele Code-Wiederholungen durchgeführt wurden, bevor sie verwendet werden konnten:

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

   xs.Save(xhtmlDocument);

ngenommen, ich möchte einen Konstruktor erstellen, der den gesamten Setup-Code für das Boilerplate vereinfacht:

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;

Das vereinfacht die Verwendung des Objekts für:

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

Außer jetzt beschwert sich Delphi, dass mein neuer Konstruktor den alten Konstruktor versteckt.

Method 'Create' verbirgt die virtuelle Methode des Basistyps 'TXMLStream'

Ich habe sicherlich nichtbedeute um den Ahnen zu verbergen, erstelle - iwolle beide

Wie füge ich einen Konstruktor hinzu (mit einemander signature) für eine abgeleitete Klasse, wobei der Konstruktor für Vorfahren beibehalten wird, damit er weiterhin verwendet werden kann?

Antworten auf die Frage(8)

Ihre Antwort auf die Frage