![]() |
Durchreichen von Const- / Destruktoren
Hallo zusammen,
ich habe folgende Struktur: Konkrete Klasse ---erbt von--> Abstrakte Klasse --erbt von--> konkreter Klasse --erbt von--> konkreter Klasse --erbt von--> TComponent mein Problem ist das ich gerne aus der ersten Klasse den Constructor aus der vorletzen rufen würde in Java würde ich das so machen:
Code:
Gibt es ein ähnliches Construkt auch für Delphi.... ich würds ja gern mit inherited machen aber da ist das Problem das ich ja nicht gleichzeitig eine Methode überschreiben und virtualisiern kann.
Super.Super.Super();
Wäre super nett wenn mir hier jemand helfen könnte. Tobi |
Re: Durchreichen von Const- / Destruktoren
Versuch mal
Delphi-Quellcode:
(self as <Klasse>).<Methode>();
|
Re: Durchreichen von Const- / Destruktoren
Hallo,
vielen Dank aber so wird da kein Schuh draus, weil ich bekomme damit ne Endlosschleife:
Delphi-Quellcode:
Hier noch mal meine Hierarchie:
constructor TMeineKlasse.Create;
begin ... (Self as TMeineKonkreteKlasse).Create; // endloss schleife ... end; TMeineKlasse -erbt von-> TAbstrakteKlasse -erbt von-> TMeineKonkreteKlasse -> TMeineUeberKlasse -> TComponent Gruß, Tobi |
Re: Durchreichen von Const- / Destruktoren
Zitat:
Code:
Oder sowas in der Art.
' A
| B1 /\ / \ B2 C HTH, Uli. |
Re: Durchreichen von Const- / Destruktoren
Wenn deine Methoden nicht virtuell sind, würde es so gehen:
Delphi-Quellcode:
Und im Falle des Konstruktors sogar direkt (Klasse.Create) Edit: Quatsch, damit erstellt man ja eine neue Klasse.
<Klasse>(self).<Methode>;
Aber, wie Uli schon schrieb. Das ist nicht im Sinne von OOP (vielleicht ist es auch deswegen in Delphi nicht wirklich vorgesehen). Da ist irgendetwas an deinem Konzept falsch. |
Re: Durchreichen von Const- / Destruktoren
Das Problem ist das ich eine konkrete Klasse dann eine DLL-Schnittstelle (Abstrakte Klasse) eine DLL (Konkrete Klasse) habe die eine Komponente beinhaltet ... und wenn ich diese Komponente irgendwo hinsetzen will muss ich vorher den Konstruktor rufen.
In mir ich wäre ja wunderbar happy wenn ich irgendwie in der Abstrakten Klasse die Methode der DLL rufen könnte und dann an die Konkrete weiter leiten. Ich hab versucht das einfach zu halten aber hier noch mal der ganze Komplizierte Aufbau:
Code:
Das ganze mache ich weil es von der visuellen Komponente verschiedene gibt die ich je nach dem was da ist oben im Projekt nutzen will. Das Problem ist wenn ich jetzt in der Dll ganz unten inherited in Create rufe dann rufe ich ja nicht das Create, aus der Visuellen Komponente, sondern das Create aus der Abstrakten Klasse.
Ein ganz normales Projekt mit einer Konkreten Klasse
| V Ein Interface als Schnittstelle für eine DLL | V Ein InterfaceObject mit einer Abstrakte Klasse(s.u.) als Member | V Eine Unit die eine Abstrakte Klasse darstellt um als Schnittstelle zur DLL | V Eine DLL die eine konkrette Klasse als abstrakte "getarnt" zurück gibt | V Eine Visuele-Komponente die ich im Endeffekt oben einbinden will |
Re: Durchreichen von Const- / Destruktoren
Ähm, dein Text ist etwas durcheinander und deswegen unlesbar :zwinker:
|
Re: Durchreichen von Const- / Destruktoren
Zitat:
Zitat:
Zitat:
Zitat:
Das Problem ist: Wenn ich jetzt in der Dll ganz unten inherited in Create rufe, dann rufe ich ja nicht das Create aus der Visuellen Komponente, sondern das Create aus der Abstrakten Klasse. So ich hoffe jetzt ist es verständlicher =) Gruß, Tobi |
Re: Durchreichen von Const- / Destruktoren
Ich könnte mich irren, aber zumindes in den älteren Versionen kann man doch keine abstrakten Klassen, sondern nur abstrakte Methoden deklarieren, bzw. man kann abstrakte Kalssen trotzdem erstellen.
D.h. es dürfte doch kein Problem sein, in der abstrakten Klasse den Konstruktor und den Destruktor zu implementieren und inherited aufzurufen, oder? |
Re: Durchreichen von Const- / Destruktoren
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz