Avatar billede x4all_dk Nybegynder
24. januar 2006 - 15:13 Der er 4 kommentarer og
1 løsning

undgå cirkular reference

Jeg har to klasser i to units,

container.pas:
container-klasse

ting.pas
ting-klasse

Hvis jeg gerne vil have at en Tting ved hvilken container den tilhører og samtidigt at en container ved hvikle ting som den har tilknyttet!  Hvordan er det lige det gøres i Delphi (version 7 pro.)  Altså både så jeg kan få container.get_alle_ting(), og ting.get_container();

Jeg har forsøgt at bruge "USES" men hvis jeg gør det i begge to så fejler den med Circilar reference!
Avatar billede psycosoft-funware Nybegynder
24. januar 2006 - 16:22 #1
kan du da ikke indsætte container.pas under uses(implementation) og ting.pas på samme måde som med container.pas...? :-)
Avatar billede hrc Mester
25. januar 2006 - 08:42 #2
Metoden som psyko' viser er den rette. I den ene unit refererer den via den øvereste uses (nedenfor interface) og i den anden indsætter du en uses under din implementation del:

unit Unit1;

interface

uses
  Unit2;

...

--------------


unit Unit2;

interface

implementation

uses
  Unit1;

-------------

I øvrigt er det et tegn på dårligt design når denne situation opstår. En løsning er, at udskille den sammenfaldende del i eksempelvis en Unit3.
Avatar billede x4all_dk Nybegynder
30. januar 2006 - 16:06 #3
Jeg kan ikke få det til at virke :(

Jeg erklærer en klasse i toppen af begge filer som begge skal
indeholde en reference til det andet.

Måske skulle jeg slå de to typer objekter sammen til en fil ?
Avatar billede hrc Mester
31. januar 2006 - 22:08 #4
Ja, det lyder som om du skal flytte dem sammen i én unit:

type
  TClass2 = class; // Forward declaration

  TClass1 = class(TList)
  private
  public
    property Items[const aIndex : integer] : TClass2 read GetClass2;
  end;

  TClass2 = class
  private
  public
    constructor Create(aParent : TClass1);
  end;
Avatar billede x4all_dk Nybegynder
01. februar 2006 - 11:04 #5
hrc -> Jeps, det virker!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester