TreeNodeカスタムタイプを派生させましたTreeNodeEx。私のでは、それに割り当てられたいくつかの Value オブジェクトTreeNodeExのイベントをサブスクライブします。NameChangedこの値の存続期間は、ツリー ノードの存続期間よりも長くなります。
私の考えでは、ツリー ノードが削除されても、Value はイベント ハンドラー デリゲートを介してツリー ノードへの参照を保持しています。したがって、これはツリー ノードへのダングリング リファレンスを保持します。
TreeNodeはありません。いつ削除されるかを知るIDisposableためにオーバーライドするイベントやメソッドはありませんTreeNode。したがって、いつイベントからフックを解除する必要があります。では、フックを外すタイミングをどのように知るのでしょうか?
class TreeNodeEx : TreeNode {
private Foo m_value;
public Foo Value {
get { return m_value; }
set {
if (m_value != null) {
m_value.NameChanged -= ValueNameChanged;
}
m_value = value;
if (m_value != null) {
m_value.NameChanged += ValueNameChanged;
}
}
}
private void ValueNameChanged(object sender, EventArgs e) {
// ...
}
}