Autor Beitrag
0xDEAD
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25

Win 7
C# (VS 2010 Professional)
BeitragVerfasst: Do 18.11.10 13:17 
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:

ausblenden Delphi-Quelltext
1:
2:
for y:=0 to Items.Count-1 do
  Items[x].SaveToFile(DateiName, SectionName);
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: 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.

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
0xDEAD Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25

Win 7
C# (VS 2010 Professional)
BeitragVerfasst: Do 18.11.10 14:24 
Das Problem ist ich leite nicht alle Objekte selber von TControl ab.
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: 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.

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
0xDEAD Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25

Win 7
C# (VS 2010 Professional)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Do 18.11.10 17:25 
Hey,

sie arbeitet eben nicht mit einer Klasse, sondern mit einem Interface. 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

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Do 18.11.10 18:42 
user profile icon0xDEAD hat folgendes geschrieben Zum zitierten Posting springen:
Ich komm mal auf den Punkt.
Das ist immer gut :lol:


user profile icon0xDEAD hat folgendes geschrieben Zum zitierten Posting springen:
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.

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."