تتمثل الفكرة وراء هذه الوحدة في توفير دورة حياة مماثلة للإشارة إلى الكائنات المحسوبة في دلفي كما يفعل الضعف في .NET.
تحتوي الكائنات المرجعية التي تم حسابها في دلفي على بعض القيود عندما يتعلق الأمر بالمراجع الدائرية ، حيث على سبيل المثال المراجع tparent ، أطفالها (عبر IChild) ، ومراجع tchild الخاصة به (عبر iParent). إذا أزلنا أي إشارات خارجية إلى مثيلات IParent و IChild دون الحصول على الطفل أولاً لإزالة الإشارة إلى IParent ، فسننتهي بأشياء يتيمة. وذلك لأن مثيلاتنا ichild و iParent تحتفظ ببعضها البعض ، وبالتالي لا يتم إطلاقها أبدًا.
الطبقات التي يمكن أن تكون ضعيفة الإشارة إلى الحاجة إلى النزول من TWeakReferencedObject .
type
TParent = class(TWeakReferencedObject, IParent)
...
end;
TChild = class(TInterfacedObject, IChild)
private
FParent : IWeakReference<IParent>;
protected
procedure SetParent(const parent : IParent);
function GetParent : IParent;
public
property Parent : IParent read GetParent write SetParent;
end;
implementation
procedure TChild.SetParent(const parent : IParent);
begin
if parent <> nil then
FParent := TWeakReference<IParent>.Create(parent)
else
FParent := nil;
end;
function TChild.GetParent : IParent;
begin
result := nil
if (FParent <> nil) and FParent.IsAlive then
result := FParent.Data;
end;
في المثال أعلاه ، إذا تم تدمير الكائن الأصل أمام الطفل ، فسيتم تمييز الإشارة الضعيفة إليه في الكائن الطفل على أنه لا شيء (لذا يعود.