![]() |
überkreuzender Bezug von Units .. kleiner Workaround
Habe eine recht schöne Lösung gefunden, wie man trotz nicht gestattetem überkreuzenden Bezug von zwei Units, diese Geschichte schön umgehen kann, ohne ständig Casts durchzuführen ...
Ziel. Zwei klassen brauchen im Klassenmodell eine gegenseitige Referenz aufeinander, befinden sich aber in verschiedenen Units.. in anderen Sprachen ja nicht so das Problem, in delpi aber nicht möglich.....
Delphi-Quellcode:
TClassA = class(TObject)
linkClassB : TClassB; end; TClassB = class(TObject) linkClassA : TClassA; end; Lösung ...
Delphi-Quellcode:
man speichert in _linkClassA die Referenz ab ... und greift nur noch über properties einer ClassHelper Klasse auf diese Referenz zu..
TClassA = class(TObject)
linkClassB : TClassB; end; TClassB = class(TObject) _linkClassA : TObject; end; diese befindet sich aber NUR im Implementationteil der Unit, damit ist ein quasi überkreuzender Bezug von Units möglich..
Delphi-Quellcode:
implementation
uses UnitClassA; type TConvertHelper = class helper for TClassB private function Get_linkClassA: TClassA; procedure Set_LinkClassA(const Value: TClassA); published property LinkClassA : TClassA read Get_LinkClassA write Set_LinkClassA; end; //============================================================================== function TConvertHelper.Get_LinkClassA: TClassA; begin result := TClassA(_linkClassA); end; //============================================================================== procedure TConvertHelper.Set_LinkClassA(const Value: TClassA); begin _linkClassA := Value; end; und jetzt kann man in irgendeiner Methode von TClassB wunderschön mit
Delphi-Quellcode:
auf das Object zugreifen, ohne ständig rumcasten zu müssen :-)
self.linkClassA
|
Re: überkreuzender Bezug von Units .. kleiner Workaround
Ok und in welcher Delphiversion funktioniert das?
|
Re: überkreuzender Bezug von Units .. kleiner Workaround
Hallo
![]() also Delphi.Net: D2005/2006 (?) aufwärts. Heiko |
Re: überkreuzender Bezug von Units .. kleiner Workaround
Also in kleineren Versionen, überprüfe ich mit "is" bei "write property" ob es die korrekte Klasse ist.
Delphi-Quellcode:
Ich weiß jedoch nicht, ob es auch für abgeleitete Klassen funktioniert. Ich könnte mir es aber vorstellen.
property Xy : TObject read GetXy write SetXy;
procedure ...SetXy(Xy : TObject); begin if not (Xy is TMyClass) then raise .... end; |
Re: überkreuzender Bezug von Units .. kleiner Workaround
also sowohl in .NET als auch unter Win32 funktioniert das.
Ab Delphi 2005 |
Re: überkreuzender Bezug von Units .. kleiner Workaround
Zitat:
Zitat:
Im Ernst : glaube nicht, dass ich solch ein Konstrukt in zig-Programmen verwenden MUSS. Es gibt keins. 8) |
Re: überkreuzender Bezug von Units .. kleiner Workaround
Zitat:
|
Re: überkreuzender Bezug von Units .. kleiner Workaround
Zitat:
Äh?
Delphi-Quellcode:
Oder hab ich was verpasst? :gruebel:
Type
TClassA = Class; TClassB = Class; ... TClassA = Class fRefB : TClassB; End; TClassB = Class fRefA : TClassA; End; |
Re: überkreuzender Bezug von Units .. kleiner Workaround
Zitat:
Zitat:
Uli. |
Re: überkreuzender Bezug von Units .. kleiner Workaround
Ah. Na dann ... Ist die Aufteilung in Units falsch. Beide Klassen gehören, da untrennbar miteinander verbunden, auch zusammen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:00 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