Spontan fällt mir so etwas ein (schnell heruntergetippt, das geht mit Sicherheit auch eleganter, funktionieren sollte es aber):
Delphi-Quellcode:
type
TKlasse2 = class;
TKlasse1 = class
private
FOwner: TKlasse2;
procedure SetOwner(const Value: TKlasse2);
public
constructor Create(AOwner: TKlasse2);
destructor Destroy; override;
property Owner: TKlasse2 read FOwner write SetOwner;
end;
TKlasse2 = class
private
FKlasse1: TKlasse1;
public
constructor Create(AKlasse1: TKlasse1);
property Klasse1: TKlasse1 read FKlasse1 write FKlasse1;
end;
{ TKlasse2 }
constructor TKlasse2.Create(AKlasse1: TKlasse1);
begin
inherited Create;
FKlasse1 := AKlasse1;
end;
{ TKlasse1 }
constructor TKlasse1.Create(AOwner: TKlasse2);
begin
inherited Create;
FOwner := AOwner;
end;
destructor TKlasse1.Destroy;
begin
Owner := nil;
inherited;
end;
procedure TKlasse1.SetOwner(const Value: TKlasse2);
begin
if Assigned(FOwner) then
FOwner.Klasse1 := nil;
FOwner := Value;
end;
Das Blöde ist dabei halt, dass sich die Klassen gegenseitig kennen müssen, unschön, gebe ich zu.