Ich habe ein komplexes Objekt, das tief kopiert werden kann (viele Arrays, Objekte, Zeiger, Ebenen von Vererbungsebenen, Hunderte von Mitgliedern verschiedener Typen und mehr) und es über die Zuweisungsmethode von Delphi neu zu erstellen ist nicht produktiv und am meisten wahrscheinlich zu komplex.
Ich habe mir Rtti
angesehen und es scheint eine gute Option zu sein, aber bisher konnte ich nicht alle möglichen Szenarien abdecken. Ich möchte nicht so viel Zeit verschwenden und hoffen, ein gutes und einfaches Beispiel zu finden. Leider konnte ich noch keinen finden. Was ich bisher gemacht habe, ist, alle TRttiField
im Objekt mit einer Schleife ( TRttiType.GetFields()
) durchzugehen und alles anhand von Pointern basierend auf TTypeKind
-Werten zuzuweisen. (tkPointer, tkClass, tkClassRef ...)
Ich habe ein JSON / Marshalling-Beispiel gefunden, aber es konnte mein komplexes Objekt nicht tief kopieren; Ich habe Fehler;
Intern: Typ tkPointer wird derzeit nicht unterstützt
Gibt es irgendetwas in Delphi, das der C # -binären Serialisierung nahekommt und eine tiefe Kopie unter Verwendung eines Speicherstroms erzeugt? Oder gibt es ein gutes und einfaches Beispiel, das Sie in Delphi kennen, wenn Sie tiefe Kopien mit RTTI oder JSON / Marshalling machen, die mit den komplexesten Objekten funktionieren würden?
Mit ein paar Worten können Sie
Sie müssen also näher auf TPersistent und seine untergeordneten Objekte schauen und die Methoden Zuweisen , AssignTo überschreiben (es gibt keinen einfacheren Weg)
Alex Ich hatte das selbe Problem wie du, ich habe mir ein wenig den Kopf gebrochen und den folgenden Code geschrieben, der mein Problem beantwortet hat, hoffentlich auch deinen oder andere.
%Vor%