Autor Téma: Dve triedy a každá má tú druhú ako pole  (Přečteno 249 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5570
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Dve triedy a každá má tú druhú ako pole
« kdy: 11-12-2019, 13:59:46 »

To automaticky znamená kruhovú referenciu.
Kód: Delphi [Vybrat]
  1. unit CustomObject;
  2. type
  3.   TCustomObject = class(TObject)
  4.   strict protected
  5.     FCustomDB: TCustomDB;  // Inštanciu vytváram v tejto triede.
  6.  
  7.  
  8. unit CustomDB;
  9. type
  10.   TCustomDB = class(TObject)
  11.   strict private
  12.     FMyObject: TCustomObject;  // Ako to tu dostať? Tu by som to len ukladal. Nevytváral!
Samozrejme, že implementation uses nejde použiť.
Teraz používam globálnu premennú, čo sa mi nepáči.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline raul

  • Hrdina
  • ****
  • Příspěvků: 368
  • Karma: 15
    • Verze Delphi: FPC :D
Re:Dve triedy a každá má tú druhú ako pole
« Odpověď #1 kdy: 11-12-2019, 14:02:34 »
V jednom souboru to jde pres forward declaration. Ve vice souborech si musis pomoct tObjectem v interface a pretypovanim v implementation (kde uz ti nebude dochazet v uses k circular reference).

tzn fMyObject : tObject;

no a pak kde ho pouzivas pouzit tCustomObject(fMyObject).....
Lazarus 1.6.3:), FPC, Intel/Arm, Windows/Linux

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5570
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Dve triedy a každá má tú druhú ako pole
« Odpověď #2 kdy: 11-12-2019, 14:29:02 »
Ďakujem. To pretypovanie mi stačí. A dokonca ho v inom podobnom prípade používam :-[
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.