Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Klassen die sich gegenseitig als "Feld" instanzieren?
Christian V. - Sa 05.07.08 15:26
Titel: Klassen die sich gegenseitig als "Feld" instanzieren?
hallo, angenommen ich habe TKlasseA und TKlasseB, wie kann ich es erreichen, dass beide Klassen die jeweils andere instanzieren?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| type TKlasseA = class private KlasseB: TKlasseB; end; TKlasseB = class private KlasseA: TKlasseA; end; |
Zuerst habe ich versucht beide Klassen in je einer Unit zu haben, und sich dann mit Hilfe von uses gegenseitig zu referenzieren, allerdings bin ich dann auf das nette Phänomen "zirkuläre unit-referenz" gestossten :D
Der andere Ansatz, wie oben im Codebeispiel zu sehen, beide Klassen in der gleichen Unit zu haben, funktionierte auch nicht.
BTW: nennt sich KlasseB und KlasseA hier "Feld"? Oder wie bezeichnet man das?
Hidden - Sa 05.07.08 15:58
Hi,
Jop, das sind Feldvariablen.
Für dein Problem gibt es drei Lösungen:
1): Du leitest von einer Klasse ab und deklarierst das erste Feld allgemeiner.
2): Deklariere die erste Feldvariable als TObject und mache einen
TYPECAST.
3), habe ich vor kurzem bei der Deklaration der Klasse TList gesehen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| type TKlasseA = class;
TKlasseB = class (TObject) FInstanz: TKlasseA; end;
TKlasseA = class(TObject) FInstanz: TKlasseB; end; |
mfG,
Christian V. - Sa 05.07.08 16:17
Bei 1) verstehe ich nicht ganz wie du das meinst.
Nummer 2 möchte ich eigentlich nicht, da ich dann auch von aussen her immer den Typecast benutzen muss, und das ziemlich oft. Sieht nicht sehr sauber aus, finde ich.
3) gefällt mir hingegen sehr gut :D Danke für den Tipp, gibt beim kompilieren zumindest keinen Fehler mehr aus. Danke!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!