@stahli:
Wenn ich dich richtig verstehe, dann willst du für deine Objekte das gleiche Verhalten wie in einer Datenbank bei ForeignKeys.
Die können z.B. bei einer Löschung des Basis-Datensatzes alle verlinkten Datensätze entsprechend aktualisieren und dort die Referenz z.B. auf NULL setzen.
Ein Ansatz dazu wäre folgender:
Delphi-Quellcode:
type
TTurnier = class
private
fPersonID : integer;
procedure SetPerson( const Value : IPerson );
function GetPerson : IPerson;
public
property Person : IPerson read GetPerson write SetPerson;
end;
procedure SetPerson( const Value : IPerson );
begin
fPersonID := Value.ID;
end;
function GetPerson : IPerson;
begin
Result := GlobaleObjektListe.GetPerson( fPersonID );
end;
Jetzt kannst du bei Bedarf die Person aus der Turnier-Instanz holen und bekommst nur dann eine gülitge Instanz, wenn es diese Person auch noch in der GlobalenObjektListe enthalten ist.
Diese GlobaleObjektListe gibt die Instanzen allerdings nicht frei, sondern vergisst diese einfach nur (IPerson => Interface).
Dann sollte es nicht mehr rumsen und die Referenzen sind sauber.
Und dieses Rumgeeiere mit
RTTI kannst du dir sparen