2

次のような状況があります。

AList<WeakReference<MyClass>>MyClassは、 というイベントがありMyEventます。リストを反復処理し、すべての有効な参照に対して、そのMyEventターゲットで を呼び出す可能性があります。

コードの他の部分では、これらのオブジェクトへのライブ参照を保持しています。プロセスが次のようになっているとします。

var list = new List<WeakReference<MyClass>>();
var a = new MyClass();
a.MyEvent += delegate {
    DoSomeStuff(a);
};
list.Add(new WeakReference<MyClass>(a));

ここで、 をもう使用しないaと仮定して、処分することにします。だから今、a = null.

無効な参照の元のリストをクリアする定期的なチェックのセットアップがあります。私が疑問に思っているのは、私が接続したこのイベント ハンドラーは、以前のaインスタンスをMyClass生きたままにして、リストからクリーンアップするのを妨げているのでしょうか?

イベントが単なる通常Actionの ではなく、Action<MyClass>それ自体をパラメーターとしてハンドラーに渡した場合はどうなるでしょうか? ある意味では、ハンドラーが呼び出されない場合でも、そのハンドラーは元のオブジェクトへの参照を保持しています。

これは非常に明白かもしれません。答えを知っている同様の状況を考えることができますが、その関数をまさにそのオブジェクトにフックしているという事実は、私を疑わしくさせます。それが生き続けると、システム全体が壊れるので、知る必要があります.

4

0 に答える 0