![]() |
Externe Deklaration von Klassen
Hallo,
ich habe ein (in Delphi) aufwändiges Problem. Und zwar:
Delphi-Quellcode:
//Unit1:
uses Unit2; TKlasseA = class(TObject) KlasseB : TKlasse B; end; //Unit2: TKlasseB = class(TObject) Parent : PKlasseA; end; So, wie man sieht brauche ich in Klasse B einen Pointer auf seinen Parent. Es ist keine Option (für mich) beides in eine Unit zu packen. Da hat man natürlich die Möglichkeit, sowas per Forward-Deklaration zu lösen. Wenn ich Unit1 in Unit2 im Interface einbinde, dann hab ich natürlich eine Überkreuzung drin. Ich muss doch irgendwie eine Extern-Deklaration machen können, um dem Compiler zu sagen, dass da etwas existiert, was später noch dem Linker mitgeteilt wird. Besteht evtl die Möglichkeit den Code nur zu kompilieren und später zu linken? Ich hoffe ihr könnt mir weiterhelfen. |
Re: Externe Deklaration von Klassen
Zitat:
Zitat:
Zitat:
Einzige Lösung ist: Überwinde deinen Ordnungsdrang und apcke beides in eine Unit. Und wenn du meinst, dass das zu unübersichtlich wird, guck dir mal die VCL-units an ;) |
Re: Externe Deklaration von Klassen
Du kannst natürlich acuh nochmal dein Design überdenken: solange TKlasseB nicht auf Parent.KlasseB zugreifen muss, kannst du das Problem mit einer abstrakten TKlasseA lösen.
|
Re: Externe Deklaration von Klassen
Zitat:
Es wird ihm später ja noch mitgeteilt, was genau TKlasseA für ein Typ ist. Zitat:
|
Re: Externe Deklaration von Klassen
Zitat:
|
Re: Externe Deklaration von Klassen
Zitat:
|
Re: Externe Deklaration von Klassen
Zitat:
Ach ja, eine Alternative zu "Beides in eine Unit packen" gibt's noch: Benutze C# .net :mrgreen: |
Re: Externe Deklaration von Klassen
Zitat:
|
Re: Externe Deklaration von Klassen
Zitat:
|
AW: Externe Deklaration von Klassen
Bei Prism XE ist genau dieses Beispiel dabei. Ansonsten ist mir aber Delphi "sympatischer".
Ist es denkbar, dass die Embjaner Delphi künftig auf einen Multipasscompiler umstellen? Die unzulässigen Überkreuz-Bezüge sind m.E. das größte (bzw. einzige) Problem im Delphi. Oder ist das technisch ausgeschlossen? Eine entsprechende Möglichkeit würde m.E. VIELES deutlich vereinfachen (möglicher Verzicht auf Typecasts und Events). (Ich weiß, dass manche Entwickler solche Querbezüge ablehnen, aber man müsste sie ja nicht nutzen.) |
AW: Externe Deklaration von Klassen
Die richtige Lösung wurde meiner Meinung nach schon vorstellt. Einfach eine weitere Unit hinzufügen in der für beide Klassen jeweils eine abstrakte Basisklasse vorhanden ist. Und die beiden abgeleiteten Klassen beinhalten dann kein Member der anderen Klasse sondern ein Member der anderen Basisklasse.
|
AW: Externe Deklaration von Klassen
Das war nicht die Frage. Man kann sich mit verschiedenen Konstrukten behelfen, die aber alles andere als optimal und übersichtlich sind. Wenn z.B. die echte Klasseninstanz zur Basisklasse neue Methoden beseitzt, kommt man an diese ohne Typecasts nicht heran.
Die Frage war, ob Delphi das möglicherweise künftig mitbringen könnte... |
AW: Externe Deklaration von Klassen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:56 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