Mam złożony obiekt do głębokiej kopii (wiele tablic, obiektów, wskaźników, warstw warstw dziedziczenia, setki elementów różnych typów i więcej), i ponowne tworzenie go za pomocą metody Assign Delphi jest nieproduktywny i najprawdopodobniej zbyt skomplikowany.Kopiowanie obiektów w delphi
Patrzyłem na Rtti
i wydaje się, że to dobra opcja, ale do tej pory nie mogłem omówić wszystkich możliwych scenariuszy. Nie chcę tracić czasu i mam nadzieję znaleźć dobry i prosty przykład. Niestety, nie mogłem go jeszcze znaleźć. Co robiłem do tej pory, przechodzę przez cały obiekt z pętlą (TRttiType.GetFields()
) i próbuję przypisać wszystko za pomocą wskaźników opartych na wartościach TTypeKind
. (tkPointer, tkClass, tkClassRef ...)
Znalazłem przykład JSON/Marshalling, ale nie mogłem głęboko skopiować mojego złożonego obiektu; Mam błąd;
Wewnętrzne: Rodzaj tkPointer nie jest obecnie obsługiwana
http://www.yanniel.info/2012/02/deep-copy-clone-object-delphi.html
Czy jest coś w Delphi blisko C# szeregowania binarny i tworząc głęboką kopię za pomocą strumienia pamięci. Czy istnieje dobry i prosty przykład, o którym wiesz w Delphi, wykonując głęboką kopię z RTTI lub JSON/Marshalling, które działałyby z najbardziej złożonymi obiektami?
Jerry, ta klasa dziedziczy już TPersistent, a funkcja Assign jest nadpisana. Musiałbym ręcznie przypisać sobie wzajemnie setki obiektów, chyba że jest to automatyczny sposób. (Próbowałem wywoływać dziedziczony program Assign, który spowodował błąd w stylu "Nie można przypisać MyObject do MyObject", co miało miejsce, mimo że sprawdzałem poprawny typ obiektu przed wywołaniem przypisania.) – Alex
Setki członków? Wygląda na to, że musisz złagodzić tego złego chłopca. Na to, co jest warte, są setki pytań o przetrwanie na SO. Wiele odpowiedzi już tam jest. –
Nie, 'Assign' nie działa w ten sposób. ** Musisz ** nadpisać 'AssignTo' i podać średnią dla kopiowania – OnTheFly