Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Mit TList<TMyClass>.Add neues Objekt erzeugen
Nano-Ware - Do 12.04.12 14:53
Titel: Mit TList<TMyClass>.Add neues Objekt erzeugen
Hey,
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33:
| type TMC = class public a : String; end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); var a, b : TMC; list : TList<TMC>; begin list := TList<TMC>.Create; a := TMC.Create; a.a := 'First'; list.Add(a); a.a := 'Second'; list.Add(a);
for b in list do begin
ShowMessage(b.a); end;
end; |
Ich hätte gerne, dass dieser Code First und dann Second ausgibt. Wie mache ich das denn am geschicktesten?
Delphi-Quelltext
1: 2: 3:
| i := list.Add(a); list.items[i] := TMC.Create; list.items[i].CopyFrom(a); |
Das funktioniert schon, ist aber nicht wirklich schön.
Danke für Verbesserungsvorschläge
Nersgatt - Do 12.04.12 15:01
Du fügst ja nur zu der Liste eine Instanz von TMC hinzu.
Nach dem list.Add(a) verweisen sowohl a, als auch list.Items[0] auf die selbe Instanz. Nach dem 2. list.add(a) verweist auch list.items[1] auf wieder die selbe Instanz von TMC! Dann führen schon 3 Wege nach Rom.
Du musst nach Zeile 22 ein a := TMC.Create einfügen, um eine neue, separate Instanz zu erstellen.
Nano-Ware - Do 12.04.12 15:11
Okay da hätte ich eigentlich auch selbst draufkommen können. Aber wenn ich jetzt zwei TList habe und eine davon mit verschiedenen Objekten gefüllt ist. Wie clone ich dir, damit beide anfangs den selben Inhalt haben, aber unabhängig voneinander sind?
Nersgatt - Do 12.04.12 15:19
Mit Zielliste.Assign(Quellliste);
Aber mich dünkt, dass Du da vielleicht ein konzeptionelles Problem hast, bei dem, was Du vor hast... :lupe:
Gausi - Do 12.04.12 15:50
Wenn die Objekte in den Listen hinterher unabhängig sein sollen, dann reicht das assignen der Liste nicht aus - dabei werden ja nur die Pointer kopiert. Dann müssen auch alle Objekte doppelt erzeugt werden.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!