Zitat von
omata:
Vielleicht so...
Delphi-Quellcode:
function TNObject.MakeClone: TNObject;
begin
Result:=TNObject(Self.ClassType.Create);
Result.Assign(Self);
end;
var O, Oclone:TNObject;
begin
O:=TNObjDoor.Create;
Oclone:=O.MakeClone;
ShowMessage(Oclone.ClassName);
end;
Verzwickterweise gibt dieser Test sogar das richtige aus, allerdings wird der falsche constructor aufgerufen, nämlich der von TNObject. Dadurch werden manche Werte nicht richtig initialisiert und es kracht.
@Pfoto:
Der Typecast auf eine "class of"-Klasse ist mir heute nacht im Bett auch noch eingefallen. Und siehe da, das klappt sogar!
Delphi-Quellcode:
TNObjectClass = class of tnobject;
...
function TNObject.MakeClone: TNObject;
begin
result := TNObjectClass(ClassType).Create;
result.Assign(self);
end;
Danke an alle!