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) {
// ...
}
}