Evitar referencias circulares entre clases en varias unidades (Delphi)
En el ejemplo anterior de la referencia circular en una misma unidad. Si decidimos separarlos en 2 unidades diferentes, tendremos el mismo problema. Al hacer referencia de cada unidad en su uses, nos encontraremos con un error de compilaciĆ³n.
unit Unit1;
interface
uses Unit2;
type
TClassA = class(TObject)
public
objClassB: TClassB;
end;
implementation
end.
unit Unit2;
interface
uses Unit1;
type
TClassB = class(TObject)
public
objClassA: TClassA;
end;
implementation
end.
Para solucionar este problema, utilizaremos una Interface entre las 2 clases que la pondremos en una tercera unidad:
Ahora tendriamos:
unit Unit3;
interface
type
IClassB = interface
['{9816C2EC-C816-44EF-A6B4-C7B25BADE494}']
end;
implementation
end.
unit Unit1;
interface
uses Unit3;
type
TClassA = class(TObject)
public
objClassB: IClassB;
end;
implementation
end.
unit Unit2;
interface
uses Unit1, Unit3;
type
TClassB = class(TInterfacedObject, IClassB)
public
objClassA: TClassA;
end;
implementation
end.
Comments
Post a Comment