Ich habe das für meine Kurven-Hierarchie mit Basisklasse TKurve so gelöst:
Delphi-Quellcode:
type
TKurve = class(TPureInterfacedObject, IDrawable)
private
constructor CreateRaw; // nur fürs Klonen
//...
public
//...
function Clone: TKurve;
procedure Assign(AKurve: TKurve); virtual;
//...
end;
Delphi-Quellcode:
constructor TKurve.CreateRaw;
begin
inherited Create;
end;
function TKurve.Clone: TKurve;
type
TKurvenClass = class of TKurve;
begin
// Da der Konstruktor über ClassType aufgerufen wird (und nicht direkt
// TKurve.CreateRaw), wird eine Instanz des richtigen Typs erzeugt:
Result := TKurvenClass(ClassType).CreateRaw;
Result.Assign(Self);
Assert(Result.ClassType = ClassType);
end;
Vielleicht nützt dir das was.
Ciao, Uli.