Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Verkette Liste mit unbekannten Objekten? (https://www.delphipraxis.net/35340-verkette-liste-mit-unbekannten-objekten.html)

Pseudemys Nelsoni 5. Dez 2004 19:02


Verkette Liste mit unbekannten Objekten?
 
Tag,

ich habe vor eine klasse(in einer extra unit) zu schreiben (TLinkedList)... ich möchte dann eine instanz dieser klasse erzeugen und dabei die klasse um die sich die liste handelt übergeben...wie geht das? geht das überhaupt? also sowas wie:

Delphi-Quellcode:
PLinkedList = ^TUnbekanntesObjekt
  var1: string;
  var2: string;
  var3: string;
end;
?

Jens Schumann 5. Dez 2004 19:15

Re: Verkette Liste mit unbekannten Objekten?
 
Hallo,
es hört sich so an als ob das Gespann TCollection/TCollectionItem erfinden möchtest.

Chewie 5. Dez 2004 19:25

Re: Verkette Liste mit unbekannten Objekten?
 
Zitat:

Zitat von Jens Schumann
Hallo,
es hört sich so an als ob das Gespann TCollection/TCollectionItem erfinden möchtest.

Nicht ganz. TCollection fußt doch auf einem Array, oder?

Pseudemys Nelsoni 5. Dez 2004 19:35

Re: Verkette Liste mit unbekannten Objekten?
 
ja tut es, und da ich meine dynamischen arrays gerade durch verkettete listen ersetze...

das problem ist das ich für jeden record(geht das gleiche überhaupt mit klassen?) eine neue klasse schreiben muss, weil das item der verketteten liste jedes mal ein anderes ist

fiasko 5. Dez 2004 19:42

Re: Verkette Liste mit unbekannten Objekten?
 
Hallo,

ich glaube polymorphe Funktionen gehen mit Delphi nicht. Wozu brauchst du das aber überhaupt, die TLinkedList soll ja nichts mit den gespeicherten Daten anfangen? Dann nimm doch einen allgemeineren Typen, also z.B. ein TObject wenn nur Klassen zugelassen werden sollen oder einfach nur ein Pointer.

Chewie 5. Dez 2004 20:16

Re: Verkette Liste mit unbekannten Objekten?
 
Zitat:

Zitat von fiasko
Hallo,
ich glaube polymorphe Funktionen gehen mit Delphi nicht.

Klar gibts die. Allerdings hab ich den Eindruck, dass du hier eher Generics alias parametrisierbare Klassen meinst :?

Pseudemys Nelsoni 5. Dez 2004 21:03

Re: Verkette Liste mit unbekannten Objekten?
 
irgendwie krieg ich den dreh nicht raus wie ich VERSCHIEDENE objekte in so eine liste bekomme.
wenn es um eine liste EINES typs ging hab ich das immer so gemacht:

Delphi-Quellcode:
PMyList = ^TMyList;
  TMyList = record
    blah1: string;
  end;

nur was nehme ich statt ^TMyList wenn ich eben verschiedene objekte übergeben möchte?

Chewie 5. Dez 2004 21:22

Re: Verkette Liste mit unbekannten Objekten?
 
Wenn du es objektorientiert machst, dann brauchst du einfach eine Basisklasse, von der alle anderen Klassen abgeleitet sind.

Ein kleines Beispiel: Du willst Daten über CD/DVDs verschiendener Arten (Musik, Video, Bilder) speichern:

Delphi-Quellcode:
type
  TListEntry = class
  end;
 
  TListNode = class
  private
    Data: TListEntry;
    Next: TListNode;
  end;
 
  TAudioDisc = class(TListEntry)
  //hier Klassen-Interface
  end;
 
  TVideoDisc = class(TListEntry)
  //hier Klassen-Interface
  end;

  TImageDisc= class(TListEntry)
  //hier Klassen-Interface
  end;

var
  ln: TListNode;
begin
  //...
  ln.Data := TImageDisc.Create;

Nun kannst du alles, was vn TListEntry abgeleitet ist, dranhängen.

Pseudemys Nelsoni 5. Dez 2004 21:30

Re: Verkette Liste mit unbekannten Objekten?
 
moin chewie,

danke für dein beispiel, wenn folgendes nicht möglich ist werd ich es so machen ;)

eigentlich habe ich mir das so gedacht, das ich die klasse TLinkedList einmal(!) schreibe und dann niemehr was daran aendern muss, d.h ich kann sie immer in meinen programmen verwenden, egal für welche objekte...

ich dachte mir das dann ca so in meinem hauptprogramm:

Delphi-Quellcode:
type
  TForm1 = class(TForm)
  private
    MyList: TLinkedList // meine klasse
  public
    procedure irgendeineprozedur;
  end;

...

procedure TForm1.irgendeineprozedur;
begin
  MyList.AddItem(instanzIRGENDEINERklasse); //additem = methode von TLinkedList
end;

weisst wie ich meine?

Chewie 5. Dez 2004 21:35

Re: Verkette Liste mit unbekannten Objekten?
 
OK, wenn du das mit Records machen willst geht das auch. Du musst dann deine "Nutzlast" als Zeiger auf ein Record definieren. Entweder untypisiert oder, analog zu der OOP-Variante, einen Record mit varablem Anteil anlegen.

Ich würde dir aber schwer zu der OOP-Variante raten. Dort sparst du dir u.U. die ewigen Typabfragen, indem du Hier im Forum suchenPolymorphie verwendest.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:10 Uhr.
Seite 1 von 2  1 2      

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