Hallo zusammen!
Ich habe zwei Klassen TFischTeich und TFisch die in zwei verschiedenen Units implementiert sind. Der FischTeich benutzt Objekte vom Typ TFisch. Soweit kein Problem. Allerdings muss ich in TFisch auch eine Variable vom Typ TFischTeich haben, damit der Fisch weiß, in welchem Teich er ist. Da man die beiden Units aber nicht ineinander einbinden kann, brauche ich einen Ausweg. Drei habe ich schon ausprobiert, aber ich bin nicht so richtig zufrieden:
1.) In TFisch die Variable für den Teich einfach als TObject deklarieren. Bei der Verwendung im Implementationsteil (da kann die Unit dann ja eingebunden werden) dann immer eine Typenumwandlung TFischTeich(Teich).xyz durchführen. Das find ich aber zu Umständlich.
2.) Vorwärtsdeklaration verwenden, in dieser Reihenfolge:
TFischTeich = class;
TFisch = class(TObject) ... end;
TFischTeich = class(TObject) ... end;
Das hat aber den Nachteil, dass die gesamte Implementation beider Objekte in der gleichen Unit stehen muss. Das ist zu unübersichtlich und soll aus formalen Gründen (für jede Klasse eine eigene Unit) auch nicht sein.
3.) Erst eine Klasse mit abstrakten Prozeduren deklarieren und in der Implementierung dann eine Instanz der "mit Leben gefüllten" Klasse verwenden. Aber auch hier sind Typumwandlungen nötig und auch das finde ich eigentlich zu unübersichtlich.
Hat jemand eine bessere Idee? Oder welche der drei Varianten findet ihr am besten?
Danke, dass ihr euch dieses Problem angeschaut habt!
-Max
Ich habe zwei Klassen TFischTeich und TFisch die in zwei verschiedenen Units implementiert sind. Der FischTeich benutzt Objekte vom Typ TFisch. Soweit kein Problem. Allerdings muss ich in TFisch auch eine Variable vom Typ TFischTeich haben, damit der Fisch weiß, in welchem Teich er ist. Da man die beiden Units aber nicht ineinander einbinden kann, brauche ich einen Ausweg. Drei habe ich schon ausprobiert, aber ich bin nicht so richtig zufrieden:
1.) In TFisch die Variable für den Teich einfach als TObject deklarieren. Bei der Verwendung im Implementationsteil (da kann die Unit dann ja eingebunden werden) dann immer eine Typenumwandlung TFischTeich(Teich).xyz durchführen. Das find ich aber zu Umständlich.
2.) Vorwärtsdeklaration verwenden, in dieser Reihenfolge:
TFischTeich = class;
TFisch = class(TObject) ... end;
TFischTeich = class(TObject) ... end;
Das hat aber den Nachteil, dass die gesamte Implementation beider Objekte in der gleichen Unit stehen muss. Das ist zu unübersichtlich und soll aus formalen Gründen (für jede Klasse eine eigene Unit) auch nicht sein.
3.) Erst eine Klasse mit abstrakten Prozeduren deklarieren und in der Implementierung dann eine Instanz der "mit Leben gefüllten" Klasse verwenden. Aber auch hier sind Typumwandlungen nötig und auch das finde ich eigentlich zu unübersichtlich.
Hat jemand eine bessere Idee? Oder welche der drei Varianten findet ihr am besten?
Danke, dass ihr euch dieses Problem angeschaut habt!
-Max
Comment