はい...
ここにかなり良い例があります:
http://web.archive.org/web/20080212232542/http://www.robherbst.com/blog/2006/08/21/c-weakreference-example/
クラスで、2 つのメンバー変数を作成しました。
WeakReference _weakRef = null;
Person _strongRef = null;
2 つの新しいPerson
オブジェクトを作成しました (これらは、この例のために作成した単純なオブジェクトで、Name
プロパティといくつかの参照追跡コードで構成されています)。次に、メンバー変数をオブジェクトの新しく作成されたインスタンスに設定しPerson
ます。
_strongRef = p;
_weakRef = new WeakReference(p1);
ここでの違いは、コンストラクターでパラメーターとして渡された人物オブジェクトを持つオブジェクトに設定されているの_strongRef
に対し、通常の通常の参照であることに気付くでしょう。_weakRef
WeakReference
(p1)
ガベージ コレクションが発生した場合、または単にテスト目的で、次のように自分で呼び出した場合:
GC.Collect();
次に、メンバー変数p1
が保持するターゲット オブジェクトを_weakRef
ガベージ コレクションする必要があります。チェックするコードを書くことができます:
if (_weakRef.IsAlive)
がまだ生きている場合は、次のようなコードを使用して、を強い参照または通常の参照にWeakReference
変換できます。WeakReference
Person p = _weakRef.Target as Person;
現在、p
参照は強い参照として扱われ、使用されなくなるまで収集されません。スコープの後に参照を保持したい場合は、それをメンバー変数に設定できます。