![]() |
Re: Trick um "überkreuzenden Bezug" von Units zu u
Genau das will er ja nicht machen.
Imho ist die einzige saubere Lösung der Umweg über eine 3. Unit die nur die Deklaraktionen enthält. Zitat:
Delphi-Quellcode:
unit Unit3;
. . type TClass2 = class; TClass1 = class p: TClass2; end; TClass2 = class p: TClass1; end;
Delphi-Quellcode:
unit Unit1;
uses Unit3...
Delphi-Quellcode:
und fertig ;)
unit Unit2;
uses Unit3... |
Re: Trick um "überkreuzenden Bezug" von Units zu u
Hi dizzy,
es bleibt dabei, dass ich halt in Unit3 alle Implementationen integrieren muss. Von beiden Objecten. Und das is halt nich schön.. |
Re: Trick um "überkreuzenden Bezug" von Units zu u
Also ich halte das eigentlich für besonders schön, da man dadurch sehr nett modularisiert. Wenn du auf einmal einen der Typen in einer weiteren Unit brauchst, reicht es die deklarierende Unit einzubinden, und du kommst nie in die Verlegenheit von Kreuzbezügen. Ich habe mir mittlerweile angewöhnt jede Klasse in eine eigene Unit zu packen bzw. sehr eng verwandte. Das eigentliche Programm hingegen enthält nur die Klassendefinition "TForm1", alles weitere wird "ge-used".
Bin damit bisher sehr gut gefahren, und die Übersichtlichkeit gewinnt zudem :). Gruss, Fabian |
Re: Trick um "überkreuzenden Bezug" von Units zu u
Zitat:
Vielleicht kann einer noch mal ein Beispiel posten. Ich habe zwei Klassen, in deren Interface-Teil muss jede auf die jeweils andere verweisen. Methoden gibt's natürlich auch. Die Implementation soll in eigenen Units erfolgen. Benutze Delphi 7. Vielen Dank, dartrax |
Re: Trick um "überkreuzenden Bezug" von Units zu u
Du könntest das mit einem Interface lösen. In einem Interface werden nur die Funktionen und Properties definiert. keine Implementierung davon. Deine Klassen TClass1 und TClass2 erweitern das Interface nur, bzw. müssen die im Interface deklarierten Funktionen implementieren. Schau die das mit den Interfaces in der Online-Hilfe an.
Grobes Gerüst: Unit3:
Delphi-Quellcode:
In Unit1 dann:
IClass1 = interface
Procedure Proc1(parameter...); Procedure Proc2(parameter..); end; IClass2 = Interface Procedure TueWas(parameter..); Procedure TueWasAnderes(..); end;
Delphi-Quellcode:
In Unit2 dann analog zur Unit1:
uses Unit3;
TClass1 = class(TObject, IClass1) p2: IClass2; Procedure Proc1(parameter...); Procedure Proc2(parameter..); end; impelementation Procedure TClass1.Proc1(paramemeter...); begin end; ...
Delphi-Quellcode:
uses Unit3;
TClass2 = class(TObject, IClass2) p2: IClass1; Procedure TueWas(parameter..); Procedure TueWasAnderes(..); end; impelementation Procedure TClass2.TueWas(paramemeter..); begin end; ... Ich denke so in etwa müsste das funktionieren, bin mir allerdings nicht ganz sicher. In Unit3 brauchst du keine implementierung zu den Funktionen schreiben. Habe das nicht ausprobiert. Schau halt in der Hilfe nach wie genau das geht. rantanplan |
Re: Trick um "überkreuzenden Bezug" von Units zu u
die antwort von rantanplan99 ist am sinnvollsten, da unit3 nur die interfaces bestimmt.
wenn du die beiden klassen benutzen moechtest, wuerde ich dir empfehlen, nur ueber die schnittstelle auf die objekte zuzugreifen. innerhalb der objekte geht ja ohnehin nichts mehr anderes. warum muss eigentlich ein kreuzbezug zwischen den beiden klassen bestehen? |
Re: Trick um "überkreuzenden Bezug" von Units zu u
Einfachste und sauberste Lösung:
Forward-Deklaration von TClass2 Deklaration von TClass1 Deklaration von TClass2 Alles in eine Unit packen. Anders geht's nicht! |
Re: Trick um "überkreuzenden Bezug" von Units zu u
naja, das ganze laesst aber auf einen design-fehler schliessen, wenn ich einen kreuzbezug erzeuge. es wuerde mich schon interessieren, warum er hier von noeten ist.
|
Re: Trick um "überkreuzenden Bezug" von Units zu u
Dann wär die VCL ein einziger Designfehler: Dort wird in TControl bereits auf TWinControl verwiesen, und ähnliches.
Forward-Deklarationen sind von daher gesehen in vielen Situationen sogar seh nützlich. @Möglicher Designfehler: Probleme bei der Hierarchie der Komponentenvererbungen, d.h. keine eindeutigen Vererbungen und Datenflüsse. |
Re: Trick um "überkreuzenden Bezug" von Units zu u
innerhalb einer unit ist es in ordnung. dass war ja auch dein loesungsvorschlag. er hat aber einen kreuzbezug zweier units. das wuerde mich interessieren.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:17 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