![]() |
Klassendeklaration: Beidseitige Referenz
Hallo,
bin ja noch rel. neu bei der OOP. Nun stehe ich vor einem kleinen Problem. Ich habe festgestellt, dass sich Klassen durch eine spezielle Hierarchie kennen. Soll heißen, dass erst TKlasse1 oben definiert sein muss, bevor ich diese unten in TKlasse2 nutzen kann. Was ist jetzt aber, wenn ich zwei Klassen habe, die sich gegenseitig brauchen und das eine vom anderen vererbt wird. Hier mal ein Beispiel
Delphi-Quellcode:
Also, hier wird Klasse2 von Klasse1 abgeleitet und Klasse1 hat zur Verwaltung mehrerer KLasse2-Objekten eine ObjectList, die nur Klasse2-Objekte annehmen soll. Sieht ganz nach einem Design-Fehler aus, oder?
TKlasse1 = class(TDatabase)
private FdbID: Integer; FKlassen2Objekte: TObjectList; procedure setdbID(Value: Integer); public {* Overrides *} constructor Create; override; destructor Destroy; override; {* Properties *} property AddKlassen2Objekt: TKlasse2 write ... //<-- Hier kennt KLasse1 die Klasse2 nicht end; TKlasse2 = class(TKlasse1) private FdbID: Integer; public {* Overrides *} //constructor Create; override; //destructor Destroy; override; {* Properties *} ... end; Vielen Dank im Voraus |
Re: Klassendeklaration: Beidseitige Referenz
die Lösung nennt sich Forward-Deklaration
Delphi-Quellcode:
TKlasse2 = class; // sagt, daß später einen Klasse TKlasse2 deklariert wird
TKlasse1 = class(TDatabase) private FdbID: Integer; FKlassen2Objekte: TObjectList; procedure setdbID(Value: Integer); public {* Overrides *} constructor Create; override; destructor Destroy; override; {* Properties *} property AddKlassen2Objekt: TKlasse2 write ... //<-- Hier kennt KLasse1 die Klasse2 nicht end; TKlasse2 = class(TKlasse1) private ... es muß aber alles innerhalb eines gemeinsamen TYPE-Blocks stehen. |
Re: Klassendeklaration: Beidseitige Referenz
Genau auf dieses Problem stoße ich im Moment andauernd, da ich am liebsten für jede Klasse eine neue Datei verwenden will. So ist es imho wesentlich übersichtlicher. Durch die oben genannte Lösung -- eine andere kenne ich bisher nicht -- geht das allerdings nicht und ich muss immer wieder auf eine einzige Datei zurückgreifen.
|
Re: Klassendeklaration: Beidseitige Referenz
erste Unit:
Delphi-Quellcode:
zweite Unit:
TBasisKlasse2 = class;
TKlasse1 = class(TDatabase) private FdbID: Integer; FKlassen2Objekte: TObjectList; procedure setdbID(Value: Integer); public {* Overrides *} constructor Create; override; destructor Destroy; override; {* Properties *} property AddKlassen2Objekt: TBasisKlasse2 write ... end; TBasisKlasse2 = class(TKlasse1);
Delphi-Quellcode:
uses ErsteUnit;
TKlasse2 = class(TBasisKlasse2) private FdbID: Integer; public {* Overrides *} //constructor Create; override; //destructor Destroy; override; {* Properties *} ... end; |
Re: Klassendeklaration: Beidseitige Referenz
Vielen Dank für den Tipp. Ist das schlechter Programmierstil?
Und wann verwendet man eigentlich verschiedene Type-Blöcke? Alle Klassen stehen bei mir in einem Type-Block. |
Re: Klassendeklaration: Beidseitige Referenz
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:30 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-2025 by Thomas Breitkreuz