Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Umgang mit verschiedenen Typen in einer Liste
0xDEAD - Do 18.11.10 13:17
Titel: Umgang mit verschiedenen Typen in einer Liste
Moin, moin!
Hier mal eine Frage. Wofür mir nur eine Idee kommt und die mir nicht gefällt.
Ich habe eine ObjectList implementiert.
Die ObjektListe speichert alle Objekte vom Typ TControl.
Jedes Objekt dieser Liste soll nun in einer Datei gespeichert werden.
Die Objekte sind von verschiedenen Typen (momentan 8 Typen, wird ausgebaut).
Alle Objekte sind von TControl abgeleitet, aber unterscheiden sich in ihrer weiteren Hierarchie.
Die einzige Idee die ich habe ist, in einer Methode die Objekte zu parsen, überprüfen welcher Typ vorhanden ist und dann die Methode für den Typ aufzurufen.
Geht es denn nicht eleganter?
So soll es aussehen:
Delphi-Quelltext
1: 2:
| for y:=0 to Items.Count-1 do Items[x].SaveToFile(DateiName, SectionName); |
Bergmann89 - Do 18.11.10 13:36
Hey,
schreib dir doch ne Klasse, die von TControl abgeleitet ist, und deine SaveToFile-Methode implementiert. Dann leitest du einfach alle deine Objekte, die zu Zeitin der Liste sind von dieser Klasse ab und hast bei jeder die SaveToFile-Methode.
Oder du machst es über ein Interface, das von jeder Klasse implementiert werden muss, das geht natürlich auch.
MfG Bergmann.
0xDEAD - Do 18.11.10 14:24
Das Problem ist ich leite nicht alle Objekte selber von TControl ab.
Bergmann89 - Do 18.11.10 14:31
Achso,
na dann wie gesagt ein Interface, ich hab die in Delphi selber noch nie benutzt nur bei Java. Aber das sollte in Delphi ähnlich einfach gehen.
MfG Bergmann.
0xDEAD - Do 18.11.10 17:17
Nee, irgendwie versteh ich es nicht!
Ich komm mal auf den Punkt.
Ich erstelle eine Anwendung, die Reports erstellen soll mit verschiedenen Elementen Diagramme, Bilder,Text, etc.
Für die Diagramme benutzen wir eine externe Bibliothek, für alles andere selber definierte Klassen.
Jetzt will ich einen Report speichern oder drucken.
Ein Report ist eine Summe aus den versch. Elementen.
Also will ich alle Elemente durchlaufen und die entsprechenden Methoden aufrufen (Save/Print).
Die Methoden sind in allen Klassen implementiert, aber mit welcher Klasse arbeitet dann die ObjectList des Reports in dem alle Elemente verwaltet werden, damit diese die Methoden kennt?
Bergmann89 - Do 18.11.10 17:25
Hey,
sie arbeitet eben nicht mit einer Klasse, sondern mit einem
Interface [
http://www.delphi-treff.de/object-pascal/interfaces/]. Eine Klasse kann mehrere Interfaces implementieren. Jetz musst du beim auslesen aus der Liste einfach auf das Interface casten und kannst die Prozedur aufrufen. Ich muss das dann mal daheim probieren, hab das in Delphi eben noch nich gemacht.
MfG Bergmann
Martok - Do 18.11.10 18:42
0xDEAD hat folgendes geschrieben : |
| Ich komm mal auf den Punkt. |
Das ist immer gut :lol:
0xDEAD hat folgendes geschrieben : |
| Für die Diagramme benutzen wir eine externe Bibliothek, für alles andere selber definierte Klassen. |
Wenn es keine gemeinsame Basisklasse gibt die die passende Methode erzwingt und du nicht dafür sorgen kannst dass das so ist, weil die Bibliothek extern ist, hast du "verloren".
Was geht: die eigenen Klassen von einer gemeinsamen Basisklasse (TReportObject oder so) ableiten, welche Save deklariert (kann ruhig abstract sein). Dann sind es schonmal nur noch 2 Fälle, die möglich sind: Externer Chart oder eigene Klasse, auf die man dann casten kann. Wäre schonmal eine vereinfachung.
Schöner wäre natürlich ein Interface (eben weil es genau für diesen Zweck gedacht ist), aber das nutzt auch nichts, wenn eine der Klassen nicht darauf angepasst werden kann.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!