Derin bir kopyalı karmaşık bir nesnem var (çok sayıda dizi, nesne, işaretçi, miras katmanları katmanları, yüzlerce farklı türde ve daha fazla üye) ve Delphi'nin Assign yöntemi ile yeniden oluşturuluyor. üretken ve büyük olasılıkla çok karmaşık değil.Delphi'de nesne kopyalama
Rtti
'a bakıyorum ve iyi bir seçenek gibi görünüyor, ancak şu ana kadar tüm olası senaryoları karşılayamadım. Çok zaman harcamak ve iyi ve basit bir örnek bulmayı ummak istemiyorum. Maalesef henüz bulamadım. Şu ana kadar yaptığım şey, TRttiField
nesnesine bir döngü (TRttiType.GetFields()
) ile gidip TTypeKind
değerlerini temel alan işaretçiler kullanarak her şeyi atamayı denemektir. (tkPointer, tkClass, tkClassRef ...)
JSON/Marshalling örneğini buldum ancak karmaşık nesneyi kopyalayamadım; Hatam var;
Dahili: Tip tkPointer anda
http://www.yanniel.info/2012/02/deep-copy-clone-object-delphi.html
Delphi C# ikili seri yakın, bir bellek akışı kullanarak derin bir kopyasını oluşturarak bir şey var mı
desteklenmez. Ya da en karmaşık nesnelerle çalışacak olan RTTI veya JSON/Marshalling ile Delphi'de bildiğiniz iyi ve basit bir örnek var mı? Birkaç kelime
Jerry, bu sınıf zaten TPersistent'i devralır ve Assign geçersiz kılınır. Bunu yapmanın otomatik bir yolu olmadığı sürece, yüzlerce nesneyi elle elle atamak zorunda kalırdım. (Devralınan Assign'ı çağırmayı denedim ve "MyObject'e MyObject öğesine atanamaz" gibi bir hata attı. Bu, Assign'ı çağırmadan önce doğru nesne türünü kontrol etmeme rağmen oluyordu.) – Alex
Yüzlerce üye? Bu kötü çocuğu biraz indirmen gerekiyormuş gibi geliyor. Buna değdiği için burada SO üzerinde yüzlerce kalıcı soru var. Orada çok fazla cevap var. –
Hayır, "Assign" bu şekilde çalışmıyor. ** ** AssignTo'yu geçersiz kılmanız ve – OnTheFly