Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Pointer, Object, :=, Assign und die Verzweiflung (https://www.delphipraxis.net/81207-pointer-object-%3D-assign-und-die-verzweiflung.html)

berens 22. Nov 2006 15:19


Pointer, Object, :=, Assign und die Verzweiflung
 
Hallo!

Ich kapier mal wieder garnix. Aus einem meiner letzten glaubte ich gelernt zu haben:
a,b: TMeinObjekt;

1) := Bedeutet
Delphi-Quellcode:
a := TMeinObjekt.Create;
a.Tag := 4;
b := a;
a.Tag := 5;

Ergebnis: a.Tag = 5; b.Tag = 5;
2) .Assign (ungefähr gleich "Objekt kopieren")
Delphi-Quellcode:
a := TMeinObjekt.Create;
b := TMeinObjekt.Create;
a.Tag := 4;
b.assign(a);
a.Tag := 5;

Ergebnis: a.Tag = 5; b.Tag = 4;
Irgendwie scheint das nicht der Fall zu sein.

Ich habe eine TComponentlist mit meinen TMeinObjekt.

3)
Delphi-Quellcode:
type
  TFoo = class(TObject)
  public
    MeinObjekt: TMeinObjekt; // Wird mit NIL initialisiert etc.
  end;

a := TMeinObjekt.Create;
MeineComponentList.Add(a); // schon vorher erschaffen etcetc
Foo := TFoo.Create;
a.Tag := 4;
Foo.MeinObjekt := MeineComponentList.Items[0];
Foo.MeinObjekt.Tag := 20;

Ergebnis: a.Tag = 4; Foo.MeinObjekt.Tag = 20;
Warum haben nun beide Objekte verschiedene Tags?

Thx für schnelle Antworten :/

Bernhard Geyer 22. Nov 2006 15:24

Re: Pointer, Object, :=, Assign und die Verzweiflung
 
Zitat:

Zitat von berens
.Assign (ungefähr gleich "Objekt kopieren"
Delphi-Quellcode:
a := TMeinObjekt.Create;
a.Tag := 4;
b.assign(a);
a.Tag := 5;

Ergebnis: a.Tag = 5; b.Tag = 4;

1, Da du b nicht mit einer gültigen Instanz belegt hast wird versucht nach nil zu Assignen
2, Wenn du eigene Properties/Membervariablen definerst benötigst Du auch eine eigene Implementierun der Assign-Methode welche diese Kopiert.

berens 22. Nov 2006 15:46

Re: Pointer, Object, :=, Assign und die Verzweiflung
 
beim beispiel 2 solle b.create natürlich mit dabei sein, sry.
ich meine halt nur bei

1) zeigen a und b auf das selbe Objekt, egal ob a oder b die .Tag eigenschaft ändert, beim a.tag immer = b.tag
2) a und b nur direkt nach dem assign daten gleich, nach der ersten verändern immer unterschiedlich

3) warum funktioniert methode 1 bei mir nicht? a.tag <> b.tag (!) (b sei Foo.MeinObjekt)

Edit: Hat sie -wie bei machen anderen Themen auch- von selbst erledigt. Meine Wenigkeit war so schlau im "richtigen" Programm anstelle von (sinngemäß) Foo.MeinObjekt := MeineComponentList.Items[0]; --> Foo.MeinObject := TMeinObjekt.Create zu machen..

Tjo, so bekommt man auch 2 Arbeitstage weg. Meine Nerven!

Danke an alle, die das gelesen haben und Bernhard für die Antwort!

Thema erledigt, jetzt gibts erstmal nen Kaffee :D


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:24 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