🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.delphi
Article #346394

Circular Unit Reference (Circular Class Reference)

#346394
From: immo
Date: Wed, 07 Mar 2018 09:45
62 lines
2883 bytes
Hej,

Zastanawiam się jak byście rozwiązali taki problem:

Ma być jedna klasa (Singleton) główna - tzw Core.
Ma w sobie mieć inne klasy ale zaimplementowane w taki sposób, żeby z każdej z nich można było wywołać Core.KlasaX.KlasaY ale na zasadzie deklaracji klasy, a nie odniesienia do jej fizycznego wystąpienia.

Żeby uprościć to co chce osiągnąć:

unit CoreMain;

uses
CoreConnection
,CoreLogic
,CoreTools
;

TCoreMain = class
Connection: TCoreConnection;
Logic: TCoreLogic;
Tools: TCoreTools;
end;

unit CoreConnection;

uses
CoreMain
;

TCoreConnection = class
Core: TCoreMain
end;


unit CoreLogic;

uses
CoreMain
;

TCoreLogic = class
Core: TCoreMain
end;

unit CoreTools;

uses
CoreMain
;

TCoreTools = class
Core: TCoreMain
end;

1. Oczywiście to powyżej uproszczony przykład, ale mniej więcej pokazuje co chciałbym osiągnąć.
2. Zrobienie tego w ten sposób spowoduje błąd Circular Unit Reference, a co ciekawe w Delphi 10.2 nie pojawia się ten błąd ale wiele mówiący F2046: Out of memory :P
3. Chciałbym żeby przez wpisanie Core w dowolnej klasie mieć dostęp do tego co deklaruje sobie TCoreMain, ale nie przez cast typu np TObject.

Tak się nad tym zastanawiam jak to zrobić ładnie i dlatego proszę Was o jakieś propozycje. Żeby nie było, ja coś takiego mam działającego :) i napiszę na koniec jak to zrobiłem. Niemniej jest to w bardzo starej apce, którą chciałbym częściowo przepisać na nowo stąd moje pytanie, bo być może jest "ładniejszy" sposób na wykonanie tego.

pozdrawiam,
Przemek O.
Technical Details
Message-ID: <06e89078-c8b6-46f1-8353-fe26050464f7@googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!peer03.am4!peer.am4.highwinds-media.com!peer01.iad!feed-me.highwinds-media.com!news.highwinds-media.com!e10no233906itf.0!news-out.google.com!a25ni562itj.0!nntp.google.com!r195no76162itc.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail

Show Full Headers
Complete Article Headers
X-Received: by 10.36.192.194 with SMTP id u185mr5912793itf.35.1520415920687;        Wed, 07 Mar 2018 01:45:20 -0800 (PST)
X-Received: by 10.157.22.195 with SMTP id s3mr1147212ots.13.1520415920480; Wed, 07 Mar 2018 01:45:20 -0800 (PST)
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!peer03.am4!peer.am4.highwinds-media.com!peer01.iad!feed-me.highwinds-media.com!news.highwinds-media.com!e10no233906itf.0!news-out.google.com!a25ni562itj.0!nntp.google.com!r195no76162itc.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.lang.delphi
Date: Wed, 7 Mar 2018 01:45:20 -0800 (PST)
Complaints-To: groups-abuse@google.com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=77.65.28.194; posting-account=uWBjDgoAAACxkgIP6dtE4dpCnc16V86n
NNTP-Posting-Host: 77.65.28.194
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <06e89078-c8b6-46f1-8353-fe26050464f7@googlegroups.com>
Subject: Circular Unit Reference (Circular Class Reference)
From: immo <przemek-o@soft-system.pl>
Injection-Date: Wed, 07 Mar 2018 09:45:20 +0000
X-Received-Bytes: 2966
X-Received-Body-CRC: 2333808241
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit