AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi TObjectlist, wie funktioniet sie wirklich?
Thema durchsuchen
Ansicht
Themen-Optionen

TObjectlist, wie funktioniet sie wirklich?

Ein Thema von Antigo · begonnen am 3. Jan 2007 · letzter Beitrag vom 3. Jan 2007
Antwort Antwort
Antigo

Registriert seit: 14. Mär 2005
274 Beiträge
 
#1

TObjectlist, wie funktioniet sie wirklich?

  Alt 3. Jan 2007, 21:16
Hi,
Ich habe schon öfters die TObjectlist benutzt um eine Vielzahl Objekte vom selben Typ zu verwalten, da sie einfach angenehmer als ein Array ist, alleine durch Insert und delete.

Aber, was macht sie wirklich, und wie bediene ich sie richtig?

Ich weiss, das Objekte nur Zeiger auf einen Speicherbereich sind, und man sie deshalb auch nicht ohne weiteres kopieren kann ala objekt1:=objekt2 da dann objekt1 nur auf Objekt2 zeigen würde und eine Änderung in einem der beiden würde daher beides betreffen.

So nun möchte ich gerne eine ganze Menge Objekte in der TObjectlist speichern. Folgendes funktioniert aber beispielsweise nicht.

Delphi-Quellcode:
  //Pseudocode
  var Objekt: TObjekt;
   liste:TObjectlist;
  begin
    TObjekt:=TObjekt.create('Test1');
    liste.add(TObjekt);
    TObjekt:=TObjekt.create('Test2');
    liste.add(TObject);
  end;
In beiden Elementen der Liste würde nun Test2 stehen.

Ist es daher richtig zu sagen, in einer TObjectlist werden nur Zeiger gespeichert? Wenn ja wie befülle ich dann am elegantesten eine TObjectlist mit vielen Elementen in einer einzelnen Prozedur. Wenn ich jedesmal nur ein Objekt reinspeichere funktioniert es, da die lokale temporäre Variable scheinbar bei jedem Aufruf eine andere Speicheradresse hat auf die ich dann über die TObjectlist zugreifen kann.

Aber ich schreibe eigentlich zuviel. Kann mir jemand erklären wie das ganze mit der TObjectlist funktioniert, also wie ich Objekte am besten lade und speichere, oder mir einen link geben wo die funktionsweise und das was dahinter steckt beschrieben wird?


Vielen Dank schonmal
Michael
"How should I know if it works? That's what beta testers are for. I only coded it."
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: TObjectlist, wie funktioniet sie wirklich?

  Alt 3. Jan 2007, 21:40
Zitat von Antigo:
So nun möchte ich gerne eine ganze Menge Objekte in der TObjectlist speichern. Folgendes funktioniert aber beispielsweise nicht.

In beiden Elementen der Liste würde nun Test2 stehen.
Falsch!

Delphi-Quellcode:
  //Pseudocode
  var Objekt: TObjekt;
      liste:TObjectlist;
  begin
    liste := TObjectList.Create;
    Try
      Objekt := TObjekt.create('Test1');
      liste.add(TObjekt);

      Objekt := TObjekt.create('Test2'); // Objekt bekommt hier eine neue Instanz zugewiesen, somit eine neue "Adresse auf die Objekt" zeigt.
      liste.add(TObject);
    finally
      list.free;
    end;
  end;
Daher sind es 2 unterschiedliche Zeiger die die Objektliste da bekommt und speichert. In beiden Einträgen stehen unterschiedliche Adresse. Der Code funktioniert so...

Zitat von Antigo:
Ist es daher richtig zu sagen, in einer TObjectlist werden nur Zeiger gespeichert?
Ja.

Zitat von Antigo:
Wenn ja wie befülle ich dann am elegantesten eine TObjectlist mit vielen Elementen in einer einzelnen Prozedur.
So wie du es selber gepostet hast.

Zitat von Antigo:
Wenn ich jedesmal nur ein Objekt reinspeichere funktioniert es, da die lokale temporäre Variable scheinbar bei jedem Aufruf eine andere Speicheradresse hat auf die ich dann über die TObjectlist zugreifen kann.
Er speichert nirgendwo die lokale temporäre Variable sondern deren Inhalt!

Kann es sein, dass deine TObjectList genauso lokal deklariert ist wie in deinem Beispiel?
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#3

Re: TObjectlist, wie funktioniet sie wirklich?

  Alt 3. Jan 2007, 21:49
Zitat von Antigo:
Ich weiss, dass Objekte nur Zeiger auf einen Speicherbereich sind, [...]
Das Objekt _ist_ der Speicherbereich. Aber die Variable enthält eben nur einen Zeiger auf eben diese Instanz.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.606 Beiträge
 
#4

Re: TObjectlist, wie funktioniet sie wirklich?

  Alt 3. Jan 2007, 21:57
Warum nicht gleich:
Delphi-Quellcode:
var
   liste:TObjectlist;
begin
  liste.add(TObjekt.create('Test1'));
  liste.add(TObjekt.create('Test2'));
end;
?
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Antigo

Registriert seit: 14. Mär 2005
274 Beiträge
 
#5

Re: TObjectlist, wie funktioniet sie wirklich?

  Alt 3. Jan 2007, 22:11
Zitat:
Objekt := TObjekt.create('Test2'); // Objekt bekommt hier eine neue Instanz zugewiesen, somit eine neue "Adresse auf die Objekt" zeigt.
ah ok, das wusste ich nicht.

Zitat:
Kann es sein, dass deine TObjectList genauso lokal deklariert ist wie in deinem Beispiel?
ähh nein, ich hab derzeit kein konkretes Problem, habs bisher immer >irgendwie hingekriegt, wollte nur wissen, was ich eigentlich tue


Zitat von Khabarakh:
Zitat von Antigo:
Ich weiss, dass Objekte nur Zeiger auf einen Speicherbereich sind, [...]
Das Objekt _ist_ der Speicherbereich. Aber die Variable enthält eben nur einen Zeiger auf eben diese Instanz.
Ja das meinte ich, war etwas dämlich ausgedrückt
Zitat von Phoenix:
Warum nicht gleich:
Delphi-Quellcode:
var
   liste:TObjectlist;
begin
  liste.add(TObjekt.create('Test1'));
  liste.add(TObjekt.create('Test2'));
end;
?
oh das geht auch? ist eigentlich noch besser


gut vielen dank für eure Hilfe, ich glaub jetzt bin ich etwas sicherer im Umgang mit der Objectlist
Michael
"How should I know if it works? That's what beta testers are for. I only coded it."
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:36 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