![]() |
Object clonen?
Hi,
folgendes Problem: ich habe ein Handvoll Listen (TCollection mit etlichen TCollectionItems, ggf. sogar selber wieder weitere TCollections darunter). Darüber wird ein Baum aufgebaut, der Objekte repräsentiert (Eine Collection an Objekten, jedes Objekt besitzt eine Collection an Eigenschaften und an Methoden). Nun will ich ein Objekt (mit allen abhängigen Eigenschaften und Methoden) duplizieren. Mit AssignTo kann ich ja nicht auf private Eigenschaften des Zielobjektes zugreifen. Auch wenn ich ein neues Objekt erzeuge kann ich ja nicht auf dessen private members, die ich aber auch kopieren muss. Und public machen will / sollte ich nicht. Und vor allem: wie behandle ich abhängige Listen? Wie mache ich das am geschicktesten und am generischsten (was für ein Wort :gruebel:)? |
Re: Object clonen?
Generisch gar nicht. Du must für jede deiner Klassen (auch bei TCollectionItems) eine neue Version der Assign/AssignTo-Methode schreiben (Dort kannst Du ja auch auf die private-Member zugreifen) und dann von unterer Ebene beginnen diese Assign-Methode so zu füllen das alles kopiert wird.
für die Liste mußt Du eine Schleife der folgenden Art implementieren:
Delphi-Quellcode:
procedure TMyList.Assign(Source: TMyList);
var i: Integer; CloneItem: TMyCollectionItem; begin for i := 0 to Length-1 begin CloneItem := TMyCollectionItem.Create; CloneItem.Assign(Source.Items[i]); Add(CloneItem); end; end; |
Re: Object clonen?
Zitat:
Na gut. Wenn's nicht anders geht :( Trotzdem Danke. |
Re: Object clonen?
Zitat:
Code:
heissen? :gruebel:
for i := 0 to Source.Length - 1
|
Re: Object clonen?
Zitat:
|
Re: Object clonen?
Bin mir nicht ganz sicher, ob ich das richtig kapiert habe...
Könnte das bitte mal bitte jemand verifizieren?
Delphi-Quellcode:
// Assign
// procedure TMyList.Assign(a_sourceList: TMyList); var i: integer; begin for i := 0 to (a_sourceList.Count - 1) do Add.Assign(a_sourceList.Items[i]); end; // Clone // function TMyList.Clone: TMyList; begin result := TMyList.Create; result.Assign(self); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz