Ho un oggetto complesso da copiare in profondità (un sacco di matrici, oggetti, puntatori, livelli di livelli di ereditarietà, centinaia di membri di vari tipi e altro), e ricrearlo tramite il metodo Assegna di Delphi è non produttivo e molto probabilmente troppo complesso.Copia di oggetti in delphi
Ho cercato Rtti
e sembra una buona opzione, ma finora non sono riuscito a coprire tutti gli scenari possibili. Non voglio perdere così tanto tempo e sperare di trovare un buon esempio. Sfortunatamente, non sono riuscito a trovarne uno. Quello che ho fatto fino ad ora è passare attraverso tutti gli TRttiField
nell'oggetto con un loop (TRttiType.GetFields()
) e provare ad assegnare tutto usando i puntatori basati sui valori TTypeKind
. (tkPointer, tkClass, tkClassRef ...)
Ho trovato un esempio JSON/Marshalling ma non è riuscito a copiare in profondità il mio oggetto complesso; Ho avuto un errore;
interna: Tipo tkPointer non è attualmente supportata
http://www.yanniel.info/2012/02/deep-copy-clone-object-delphi.html
C'è qualcosa a Delfi vicino al C# serializzazione binario e la creazione di una copia completa utilizzando un flusso di memoria. O c'è un esempio buono e semplice di Delphi che fa una copia profonda con RTTI o JSON/Marshalling che funzionerebbe con gli oggetti più complessi?
Jerry, questa classe eredita già TPersistent e Assign viene sovrascritto. Dovrei assegnare manualmente centinaia di oggetti tra loro a meno che non ci sia un modo automatico per farlo. (Ho provato a chiamare ereditato Assign e ha generato un errore tipo "Impossibile assegnare MyObject a MyObject". Ciò stava accadendo anche se stavo controllando il tipo di oggetto corretto prima di chiamare Assign.) – Alex
Centinaia di membri? Sembra che tu abbia bisogno di dimagrire questo cattivo ragazzo. Per quello che vale, ci sono centinaia di domande sulla persistenza qui su SO. Un sacco di risposte già là fuori. –
No, "Assign' non funziona in questo modo. ** Dovresti sostituire "Assegna" e fornire un mezzo per copiare – OnTheFly