Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi überkreuzender Bezug von Units .. kleiner Workaround (https://www.delphipraxis.net/100197-ueberkreuzender-bezug-von-units-kleiner-workaround.html)

stoxx 24. Sep 2007 13:39


ü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:
TClassA = class(TObject)
  linkClassB : TClassB;
end;


TClassB = class(TObject)
  _linkClassA : TObject;
end;
man speichert in _linkClassA die Referenz ab ... und greift nur noch über properties einer ClassHelper Klasse auf diese Referenz zu..

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:
self.linkClassA
auf das Object zugreifen, ohne ständig rumcasten zu müssen :-)

Dezipaitor 25. Sep 2007 13:51

Re: überkreuzender Bezug von Units .. kleiner Workaround
 
Ok und in welcher Delphiversion funktioniert das?

hoika 25. Sep 2007 14:05

Re: überkreuzender Bezug von Units .. kleiner Workaround
 
Hallo

http://delphi.about.com/od/delphifor...asshelpers.htm


also Delphi.Net: D2005/2006 (?) aufwärts.


Heiko

Dezipaitor 25. Sep 2007 14:40

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:
property Xy : TObject read GetXy write SetXy;

procedure ...SetXy(Xy : TObject);
begin
  if not (Xy is TMyClass) then
    raise ....
end;
Ich weiß jedoch nicht, ob es auch für abgeleitete Klassen funktioniert. Ich könnte mir es aber vorstellen.

stoxx 26. Sep 2007 00:19

Re: überkreuzender Bezug von Units .. kleiner Workaround
 
also sowohl in .NET als auch unter Win32 funktioniert das.
Ab Delphi 2005

Hansa 26. Sep 2007 00:31

Re: überkreuzender Bezug von Units .. kleiner Workaround
 
Zitat:

Zitat von stoxx
..Ziel. Zwei klassen brauchen im Klassenmodell eine gegenseitige Referenz aufeinander, befinden sich aber in verschiedenen Units..

Dann ist das Klassenmodell in 90 % der Fälle falsch. Lerne besser programmieren und spiele nicht so viel Billard. :mrgreen:

Zitat:

in anderen Sprachen ja nicht so das Problem, in delpi aber nicht möglich.....
Unser Ober-Schwuchtel würde dazu sagen : Und das ist auch gut so. :mrgreen:

Im Ernst : glaube nicht, dass ich solch ein Konstrukt in zig-Programmen verwenden MUSS. Es gibt keins. 8)

mkinzler 26. Sep 2007 05:38

Re: überkreuzender Bezug von Units .. kleiner Workaround
 
Zitat:

Im Ernst : glaube nicht, dass ich solch ein Konstrukt in zig-Programmen verwenden MUSS. Es gibt keins. Cool
Unter Win32 vielleicht nicht, aber unter .Net ist dies ein weitverbreitetes Konzept, vorallem bei den neueren Techniken

alzaimar 26. Sep 2007 06:50

Re: überkreuzender Bezug von Units .. kleiner Workaround
 
Zitat:

Zitat von Hansa
Unser Ober-Schwuchtel würde dazu sagen : ... :mrgreen:

Ihr Saarländer müsst grad reden, ihr mit Eurem narzißtischen Hobbit. :mrgreen:

Äh?
Delphi-Quellcode:
Type
  TClassA = Class;
  TClassB = Class;
 ...
  TClassA = Class
    fRefB : TClassB;
  End;
  TClassB = Class
    fRefA : TClassA;
  End;
Oder hab ich was verpasst? :gruebel:

uligerhardt 26. Sep 2007 08:07

Re: überkreuzender Bezug von Units .. kleiner Workaround
 
Zitat:

Zitat von alzaimar
Oder hab ich was verpasst? :gruebel:

Ja:
Zitat:

Zitat von stoxx
Ziel. Zwei klassen brauchen im Klassenmodell eine gegenseitige Referenz aufeinander, befinden sich aber in verschiedenen Units..

Hatte aber beim ersten Lesen den gleichen Gedanken. Zum Glück konnte ich meinen Reflex zu posten noch rechtzeitig unterdrücken. :)

Uli.

alzaimar 26. Sep 2007 08:13

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 03:00 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz