【发布时间】:2014-10-15 14:43:45
【问题描述】:
我知道有时您需要跟踪委托,以便正确取消订阅:
private EventHandler _handler;
public void Foo()
{
if (_handler != null)
{
Something.SomeEvent -= _handler; // Unsubscribe old event
}
_handler = delegate(object sender, EventArgs args) { };;
Something.SomeEvent += _handler;
}
但是,如果你改用方法,那还有必要吗?
public void CustomMethod(object sender, EventArgs args) { ... }
public void Foo()
{
// Not sure how to unsubscribe only if it wasn't subscribed first?
if (some way to check)
{
Something.SomeEvent -= CustomMethod;
}
Something.SomeEvent += CustomMethod;
}
【问题讨论】:
-
使用 SomeEvent.GetInvocationList() 方法检查哪些方法订阅了您的事件
-
我会让专家说了算,但我认为两者之间没有什么区别。
标签: c# memory-leaks delegates event-handling