AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi TObjectlist.add bei Objecten mit Parametern im create Aufruf
Thema durchsuchen
Ansicht
Themen-Optionen

TObjectlist.add bei Objecten mit Parametern im create Aufruf

Ein Thema von Klaus01 · begonnen am 2. Nov 2006 · letzter Beitrag vom 2. Nov 2006
Antwort Antwort
Seite 1 von 2  1 2      
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.767 Beiträge
 
Delphi 10.4 Sydney
 
#1

TObjectlist.add bei Objecten mit Parametern im create Aufruf

  Alt 2. Nov 2006, 13:56
Hallo,

hier meine Typendeklaration:

Delphi-Quellcode:
 

TfeedType = set of (audio,video,html,none);

PfeedSet = ^TfeedSet;
TfeedSet = record
  feedType : TfeedType;
  itemTitle: String[125];
  itemUrl : String[125];
  prev,next: PfeedSet;
end;


Tfeed = class(TObject)
   feedBD: File of TfeedSet;
   item: TfeedSet;

   title:String[125];
   DLPath:String[125];

   itemList: PfeedSet;
   firstItem,lastItem:pointer;

 private
   constructor create(aDLPath:String;aFeedTitle:String);
   destructor free;
 public
   procedure addItem(aFeedItem:TfeedSet);
   procedure deleteItem(aPointer:Pointer);
   function findItem(aTitle:String):pointer;
   function getItem(aPointer:Pointer):TFeedSet;
end;
Bei dem create Constructor von Tfeed benötige ich Parameter die dem Objekt übergeben werden sollen.

Wenn ich jetzt mehrere Objekte in einer ObjectList verwalten möchte, wird ja
wenn ich TObjectList.add(TFeed) das Object in der Liste instantiiert.

Wie kann ich der ganzen Geschichte dann Parameter mitgeben?

Oder sollte ich das mit der ObjectList sein lassen und anstelle dessen ein dynamisches Array hernehmen.

Brauche mal einen kleinen Denkanstoß.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: TObjectlist.add bei Objecten mit Parametern im create Au

  Alt 2. Nov 2006, 14:06
Zitat von Klaus01:
Wenn ich jetzt mehrere Objekte in einer ObjectList verwalten möchte, wird ja
wenn ich TObjectList.add(TFeed) das Object in der Liste instantiiert.
Ich versteh nicht ganz. Suchst du vielleicht TObjectList.Add(TFeed.Create(<Parameter>))?
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#3

Re: TObjectlist.add bei Objecten mit Parametern im create Au

  Alt 2. Nov 2006, 14:10
Hi!

- Die Definition von "feedBD: File Of TFeedSet" kann doch aus der Klasse raus, oder? In der Klasse willst du doch mit firstItem und LastItem auf die im Speicher vorhandenen Items zugreifen. Somit braucht diesen Filetype hier keiner. Diesen bräuchtest du nur lokal in der Lade/Speicher Methode zu deklarieren.
- TfeedSet ist ein Record und kein Objekt, daher frage ich mich, wo bei dir ein Objekt instanziiert wird?
- Wozu brauchst du noch itemList: PfeedSet;, wenn du mit firstItem und LastItem doch schon den Anfang und Ende der verketteten Liste hast?
- Die beiden Zeiger (firstItem,lastItem:pointer, sollten die nicht eher vom Typ PfeedSet sein anstatt untypisiert als Pointer?
- Constructor und Destructor sind beide öffentlich (public). Du kannst sie nicht in eine geringere Sichtbarkeitsebene verschieben (private), daher musst du sie dort rausnehmen. Wenn die beiden Methoden private wären, dann könntest du ja niemals von aussen eine Klasse instanziieren oder freigeben.

Zitat von Klaus01:
... wird ja wenn ich TObjectList.add(TFeed) das Object in der Liste instantiiert.
Falsch! Die TObjectList kennt ja den Typen der Klasse nicht welchen du ihr gibst und kann somit schlecht diesen instanziieren. Du übergibst bei Add() der TObjectList immer schon fertige Instanzen.

Zitat von Klaus01:
Wie kann ich der ganzen Geschichte dann Parameter mitgeben?
Wieso änderst du nicht TFeedSet von einem Record in ein Objekt und entfernst die Pointer für die verkettete Liste. Dann kannst du TFeedSet einen Constructor definieren mit den Parametern die du brauchst um das Objekt zu intialisieren. Und TObjectList wäre dann auch nutzbar.
  Mit Zitat antworten Zitat
Thorben77

Registriert seit: 22. Okt 2004
359 Beiträge
 
#4

Re: TObjectlist.add bei Objecten mit Parametern im create Au

  Alt 2. Nov 2006, 14:15
Auch wenn jetzt schon andere vor mir geantwortet haben:

Zitat von Klaus01:
Wenn ich jetzt mehrere Objekte in einer ObjectList verwalten möchte, wird ja
wenn ich TObjectList.add(TFeed) das Object in der Liste instantiiert.
Nein . Das Objekt erstellst Du ganz normal mit MeineFeedVariable := TFeed.Create(Die Parameter...); Zur Objektliste hinzufügen kann man es dann so: ObjectList.Add(MeineFeedVariable);
Zitat von Klaus01:
Oder sollte ich das mit der ObjectList sein lassen und anstelle dessen ein dynamisches Array hernehmen.
Die Klasse TObjectList bzw. TList kapselt auch nur ein dynamisches Array.

Nebenbei:
Den Destruktor Deiner TFeed-Klasse solltest Du lieber Destroy nennen, sonst verdeckt er die Free-Methode. Und die sollte man aufrufen, wenn man das Objekt freigeben will, nicht den Destruktor direkt.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.767 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: TObjectlist.add bei Objecten mit Parametern im create Au

  Alt 2. Nov 2006, 14:24
Hallo Thomas,

danke für die schnelle Antwort:

Zitat:
- Die Definition von "feedBD: File Of TFeedSet" kann doch aus der Klasse raus, oder? In der Klasse willst du doch mit firstItem und LastItem auf die im Speicher vorhandenen Items zugreifen. Somit braucht diesen Filetype hier keiner. Diesen bräuchtest du nur lokal in der Lade/Speicher Methode zu deklarieren
.

feedDB ist eine Datei die ich bei der Erstellung des Object einlesen und daraus eine verkettet Liste machen will.
firstItem und lastItem beinhalten die Adresse des ersten und letzten Elements der verketten Liste.

Zitat:
-TfeedSet ist ein Record und kein Objekt, daher frage ich mich, wo bei dir ein Objekt instanziiert wird?
Das TFeedSet ein Record ist, ist mir bewußt. Es beschreibt den Datensatz der feedDB. (Da muß ich noch die Pointer rausschmeißen)

Zitat:
- Die beiden Zeiger (firstItem,lastItem:pointer;), sollten die nicht eher vom Typ PfeedSet sein anstatt untypisiert als Pointer?
Ich denke, daß dies nicht unbedingt sein muß, da die Zeiger nur Adressen beinhalte und nicht unbedingt von der Datenstruktur wissen müßen.

Zitat:
- Constructor und Destructor sind beide öffentlich (public). Du kannst sie nicht in eine geringere Sichtbarkeitsebene verschieben (private), daher musst du sie dort rausnehmen. Wenn die beiden Methoden private wären, dann könntest du ja niemals von aussen eine Klasse instanziieren oder freigeben.
Habe ich nicht bedacht, werde ich ändern.

Zitat:
Wieso änderst du nicht TFeedSet von einem Record in ein Objekt und entfernst die Pointer für die verkettete Liste.
Dann kannst du TFeedSet einen Constructor definieren mit den Parametern die du brauchst um das Objekt zu intialisieren.
Und TObjectList wäre dann auch nutzbar.
Danke, da werde ich intensiver darüber nachdenken und es gegebenenalls anpassen.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.767 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: TObjectlist.add bei Objecten mit Parametern im create Au

  Alt 2. Nov 2006, 14:28
Hallo Thorben,

danke für Deinen Beitrag.

Zitat von Thorben77:
Zitat von Klaus01:
Oder sollte ich das mit der ObjectList sein lassen und anstelle dessen ein dynamisches Array hernehmen.
Die Klasse TObjectList bzw. TList kapselt auch nur ein dynamisches Array.
Habe ich so noch nicht gesehen.

Zitat von Thorben77:
Nebenbei:
Den Destruktor Deiner TFeed-Klasse solltest Du lieber Destroy nennen, sonst verdeckt er die Free-Methode. Und die sollte man aufrufen, wenn man das Objekt freigeben will, nicht den Destruktor direkt.
Das mit free schaut in der Deklaration so aus, in der free Methode wird aber noch inherited free aufgerufen.
Das konntest Du aber nicht wissen.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#7

Re: TObjectlist.add bei Objecten mit Parametern im create Au

  Alt 2. Nov 2006, 14:32
Zitat von Klaus01:
Zitat:
- Die Definition von "feedBD: File Of TFeedSet" kann doch aus der Klasse raus, oder? In der Klasse willst du doch mit firstItem und LastItem auf die im Speicher vorhandenen Items zugreifen. Somit braucht diesen Filetype hier keiner. Diesen bräuchtest du nur lokal in der Lade/Speicher Methode zu deklarieren
.

feedDB ist eine Datei die ich bei der Erstellung des Object einlesen und daraus eine verkettet Liste machen will.
firstItem und lastItem beinhalten die Adresse des ersten und letzten Elements der verketten Liste.
Trotzden ist der Dateityp doch nur in den Laden/Speichern Methoden interessant und nicht in der Klasse selber?!

Zitat von Klaus01:
Zitat:
-TfeedSet ist ein Record und kein Objekt, daher frage ich mich, wo bei dir ein Objekt instanziiert wird?
Das TFeedSet ein Record ist, ist mir bewußt. Es beschreibt den Datensatz der feedDB. (Da muß ich noch die Pointer rausschmeißen)
Wenn dem so ist, dann bewege ihn in den privaten Teil der Unit (unter Implementation), da es nach aussen nicht nötig ist den Aufbau der Datei zu kennen, oder?

Zitat von Klaus01:
Zitat:
- Die beiden Zeiger (firstItem,lastItem:pointer, sollten die nicht eher vom Typ PfeedSet sein anstatt untypisiert als Pointer?
Ich denke, daß dies nicht unbedingt sein muß, da die Zeiger nur Adressen beinhalte und nicht unbedingt von der Datenstruktur wissen müßen.
Tun sie auch weiterhin. Sie bleiben Zeiger, sie bleiben gleich gross, etc. Dafür hast du aber den Vorteil über firstItem.next dir gleich mal den 2. Eintrag zu holen, etc.
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#8

Re: TObjectlist.add bei Objecten mit Parametern im create Au

  Alt 2. Nov 2006, 14:33
Zitat von Klaus01:
firstItem und lastItem beinhalten die Adresse des ersten und letzten Elements der verketten Liste.
Das versteh ich nicht ganz. Wenn du deine Objekte in einer TObjectList ablegst, so kannst Du doch problemlos die Methoden der TObjectList nutzen, um auf deine Elemente zuzugreifen. Dann brauchst du doch nicht nochmals innerhalb des Objektes einen Pointer zu seinen Nachbarn (next und prior).
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.767 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: TObjectlist.add bei Objecten mit Parametern im create Au

  Alt 2. Nov 2006, 14:35
Zitat von Cöster:
Zitat von Klaus01:
Wenn ich jetzt mehrere Objekte in einer ObjectList verwalten möchte, wird ja
wenn ich TObjectList.add(TFeed) das Object in der Liste instantiiert.
Ich versteh nicht ganz. Suchst du vielleicht TObjectList.Add(TFeed.Create(<Parameter>))?
Hallo,

Das hilft mir ein gutes Stück weiter.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Thorben77

Registriert seit: 22. Okt 2004
359 Beiträge
 
#10

Re: TObjectlist.add bei Objecten mit Parametern im create Au

  Alt 2. Nov 2006, 14:39
Zitat von Klaus01:
Habe ich so noch nicht gesehen.
Das stimmt ja auch gar nicht. Es ist ja gar kein dynamisches Array . Nur ein ganz ordinäres statisches.

Zitat von Klaus01:
Das mit free schaut in der Deklaration so aus, in der free Methode wird aber noch inherited free aufgerufen.
Es ist aber üblich, den Destruktor zu überschreiben, nicht die Free-Methode. (Was nicht heißt, dass man es nicht machen kann.)
Es ist üblich, den Destruktor destroy zu nennen, denn wenn man ihn Free nennt, verdeckt er die Free-Methode.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 06:47 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