Autor Beitrag
Nano-Ware
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 394
Erhaltene Danke: 7



BeitragVerfasst: Do 12.04.12 14:53 
Hey,

ausblenden volle Höhe 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); //gibt 2x Second aus

    end;

end;

Ich hätte gerne, dass dieser Code First und dann Second ausgibt. Wie mache ich das denn am geschicktesten?

ausblenden Delphi-Quelltext
1:
2:
3:
i := list.Add(a);
list.items[i] := TMC.Create;
list.items[i].CopyFrom(a); //Methode, die dann nur die Eigenschaft "String (a)" kopiert und nicht nur die Refferenz


Das funktioniert schon, ist aber nicht wirklich schön.

Danke für Verbesserungsvorschläge
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: 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.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
Nano-Ware Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 394
Erhaltene Danke: 7



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: 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:

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 480

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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.

_________________
We are, we were and will not be.