我对c#
有点新意,所以如果你发现它很微不足道请忽略。我看到了以下“怪异”的代码。
任何人都可以对此有所了解。
public event Action _action;
if (_action != null)
{
foreach (Action c in _action.GetInvocationList())
{
_action -= c;
}
}
特别是_action -= c;
部分。
答案 0 :(得分:22)
委托可以是多个功能的委托。如果您有委派给alpha
的委托Alpha()
和委托给beta
的委托Beta()
,那么gamma = alpha + beta;
是一个致电Alpha()
的代表然后Beta()
。 gamma - beta
生成一个调用Alpha()
的委托。这是一个奇怪的功能,坦率地说。
您发布的代码是奇怪的。它说“通过行动中的函数列表,生成一大堆代理,调用越来越少的函数,然后最终分配一个对action
无效的委托。为什么人们会这样做呢?将null
分配给action
并完成。
答案 1 :(得分:6)
public event Action _action; //an event
if (_action != null) // are there any subscribers?
{
foreach (Action c in _action.GetInvocationList()) //get each subscriber
{
_action -= c; //remove its subscription to the event
}
}
答案 2 :(得分:2)
它正在删除操作的处理程序。
答案 3 :(得分:2)
事件实际上是MultiCastDelegate
。当您“附加”事件处理程序时,它会添加对它的引用InvocationList
。
上面的代码将InvocationList
中的每个事件处理程序与事件分离 - 基本上是“清除”事件,这也可以通过说_action = null
来完成。