Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TObjectList mit gleichem Objekt aber anderen Werten (https://www.delphipraxis.net/167331-tobjectlist-mit-gleichem-objekt-aber-anderen-werten.html)

ChEeTaH 24. Mär 2012 15:08

Delphi-Version: XE2

TObjectList mit gleichem Objekt aber anderen Werten
 
Hallo,

ich Habe eine TObjectlist die ich per Add() Methode beschreibe:

Delphi-Quellcode:
Object.Att1 := '1';
Object.Att2 := '2';

ObjectList.Add(Object);

Object.Att1 := '3';
Object.Att2 := '4';

ObjectList.Add(Object);
Ich habe das Gefühl, dass TObjectList das Objekt nur referenziert und nicht die Werte übernimmt.
Wenn ich einen Count durchführe werden zwar 2 Elemente angezeigt, allerdings sind in beiden Feldern '3' und '4'...
Wie kann ich nur die Werte übergeben und nicht die Referenz, ohne ständig ein neues Objekt erzeugen zu müssen?

MfG

Gausi 24. Mär 2012 15:10

AW: TObjectList mit gleichem Objekt aber anderen Werten
 
Wenn du in der Objectlist mehrere unterschiedliche Elemente speichern willst, musst du auch mehrere erzeugen.

ChEeTaH 24. Mär 2012 15:15

AW: TObjectList mit gleichem Objekt aber anderen Werten
 
Ich wollte das Einfügen etwas komfortabler als mit Arrays machen. Gibt es keine Möglichkeit oder zumindest eine Alternative mit der mein Ansatz funktioniert?

himitsu 24. Mär 2012 15:17

AW: TObjectList mit gleichem Objekt aber anderen Werten
 
Wurde doch genannt?
Du mußt für jeden Eintrag ein Objekt erstellen.

Zitat:

Ich habe das Gefühl, dass TObjectList das Objekt nur referenziert und nicht die Werte übernimmt.
Einen anderen Weg gibt es nicht denn dein Gefühl ist natürlich recht,
was man eigentlich wissen sollte, wenn man von OOP ein bissl Ahnung hat.

Du kannst dir höchsten eine Funktion schreiben, worin das gemacht wird.
z.B.
Delphi-Quellcode:
ObjectList.AddObject('1', '2');
und dann darin das Objekt erstellen, die Property zuweisen und der Objektliste hinzufügen.


Record geht natürlich auch, mit einer generischen TList<TMyRecors>, wobei der Code dann so bleiben kann, wie du ihn grade hast.

ChEeTaH 24. Mär 2012 15:30

AW: TObjectList mit gleichem Objekt aber anderen Werten
 
Zitat:

Zitat von himitsu (Beitrag 1158343)
Einen anderen Weg gibt es nicht denn dein Gefühl ist natürlich recht,
was man eigentlich wissen sollte, wenn man von OOP ein bissl Ahnung hat.

War mir klar, dass das so nicht funktioniert, ich habe gehofft, dass es einen kleinen "Sneakaround" gibt^^

Ich werde das Objekt wohl als Record definieren mal schauen ob ich damit zufrieden bin.
Danke soweit :)

himitsu 24. Mär 2012 16:01

AW: TObjectList mit gleichem Objekt aber anderen Werten
 
Bei der gen. TList<TMyRecord> mußt du nur aufpassen,
denn man kann einzelwerte nicht naträglich editieren/ändern, sondern muß das ganze Record austauschen.

Delphi-Quellcode:
ObjectList := TObjectList<TMyObject>;

MyObject := TMyObject.Create;
MyObject.Att1 := '1';
MyObject.Att2 := '2';
ObjectList.Add(MyObject);

MyObject := TMyObject.Create;
MyObject.Att1 := '3';
MyObject.Att2 := '4';
ObjectList.Add(MyObject);

ObjectList[0].Att1 := '5';

ShowMessage(ObjectList[0].Att1);

Delphi-Quellcode:
RecordList := TList<TMyRecord>;

MyRecord.Att1 := '1';
MyRecord.Att2 := '2';
RecordList.Add(MyRecord);

MyRecord.Att1 := '3';
MyRecord.Att2 := '4';
RecordList.Add(MyRecord);

RecordList[0].Att1 := '5'; // beschreiben geht nicht (nur lesen)

MyRecord := RecordList[0];
MyRecord.Att1 := '5';
RecordList[0] := MyRecord;

ShowMessage(RecordList[0].Att1);


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:04 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz