Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Durchreichen von Const- / Destruktoren (https://www.delphipraxis.net/136013-durchreichen-von-const-destruktoren.html)

Highttower 22. Jun 2009 09:08


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:
Super.Super.Super();
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.

Wäre super nett wenn mir hier jemand helfen könnte.

Tobi

mkinzler 22. Jun 2009 09:09

Re: Durchreichen von Const- / Destruktoren
 
Versuch mal
Delphi-Quellcode:
(self as <Klasse>).<Methode>();

Highttower 22. Jun 2009 09:33

Re: Durchreichen von Const- / Destruktoren
 
Hallo,
vielen Dank aber so wird da kein Schuh draus, weil ich bekomme damit ne Endlosschleife:

Delphi-Quellcode:
constructor TMeineKlasse.Create;
begin
    ...
    (Self as TMeineKonkreteKlasse).Create; // endloss schleife
    ...
end;
Hier noch mal meine Hierarchie:

TMeineKlasse -erbt von-> TAbstrakteKlasse -erbt von-> TMeineKonkreteKlasse -> TMeineUeberKlasse -> TComponent

Gruß,
Tobi

uligerhardt 22. Jun 2009 09:38

Re: Durchreichen von Const- / Destruktoren
 
Zitat:

Zitat von Highttower
Code:
Super.Super.Super();

Das riecht für mich danach, dass deine Klassenhierarchie falsch aufgebaut ist. Wenn du C abgeleitet von B abgeleitet von A hast und eine Routine C.Test A.Test, aber nicht B.Test aufrufen will, dann ist IMHO C besser nicht als Ableitung von B modelliert. Vielleicht du kannst B in B1 und B2 aufspalten und hast
Code:
'  A
    |
    B1
    /\
   /  \
  B2   C
Oder sowas in der Art.

HTH, Uli.

sirius 22. Jun 2009 09:51

Re: Durchreichen von Const- / Destruktoren
 
Wenn deine Methoden nicht virtuell sind, würde es so gehen:
Delphi-Quellcode:
  <Klasse>(self).<Methode>;
Und im Falle des Konstruktors sogar direkt (Klasse.Create) Edit: Quatsch, damit erstellt man ja eine neue Klasse.

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.

Highttower 22. Jun 2009 10:08

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:
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
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.

sirius 22. Jun 2009 10:27

Re: Durchreichen von Const- / Destruktoren
 
Ähm, dein Text ist etwas durcheinander und deswegen unlesbar :zwinker:

Highttower 22. Jun 2009 10:35

Re: Durchreichen von Const- / Destruktoren
 
Zitat:

Zitat von Highttower
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.

Das Problem ist das ich eine konkrete Klasse, dann eine DLL-Schnittstelle (Abstrakte Klasse) und dann eine DLL (Konkrete Klasse) habe die eine Komponente beinhaltet. Wenn ich diese Komponente irgendwo hinsetzen will muss ich vorher genau diesen Konstruktor rufen.
Zitat:

Zitat von Highttower
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 es würde mir völlig reichen, wenn ich in einer Abstrakten Klasse, einen Wrapper um den De bzw Consturctor schreiben könnte, um diese durchzureichen.

Zitat:

Zitat von Highttower
Ich hab versucht das einfach zu halten aber hier noch mal der ganze komplizierte Aufbau:

Code:
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

Das find ich ziemlich verständlich ;).
Zitat:

Zitat von Highttower
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.

Das ganze mache ich, weil es von der visuellen Komponente verschiedene gibt. Jene möchte ich je nach Verfügbarkeit im Projekt(ganz oben in der Hierarchie) nutzen.

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

jfheins 22. Jun 2009 11:39

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?

mkinzler 22. Jun 2009 11:41

Re: Durchreichen von Const- / Destruktoren
 
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.
Und wenn diese keinen hat, den seiner Superklasse


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:39 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