Zitat von
phXql:
C# und Java können sowas. Machen aber nur eine flache Kopie. Denke das geht mithilfe von Reflection.
*hust*
Delphi-Quellcode:
[Extension]
class method Cloner.CreateDeepClone<T>(instance : T) : T;
begin
var bf := new BinaryFormatter();
using s := new MemoryStream() do
begin
bf.Serialize(s, instance);
s.Position := 0;
exit T(bf.Deserialize(s));
end;
end;
....
begin
var a := new MyClass(SomeProperty := 'Abc');
var b := a. CreateDeepClone();
b.SomeProperty := b.SomeProperty + 'def';
...
end;
In Delphi geht sowas nicht.
Delphis
RTTI ist eher das was der Compiler hat liegen lassen, für die meisten Sachen reicht das bissel einfach nicht.
Eine flache Kopie ließe sich anfertigen, indem man den Record hinter dem Objekt kopiert.
Aber das wäre dann nur ein flache Kopie. Sämtliche Referenzen würden immer noch auf die gleichen Bereiche zeigen.