9

我有点新,c#所以如果你觉得它微不足道,请忽略。我看到了以下“奇怪”的代码。

任何人都可以对此有所了解。

public event Action _action;

if (_action != null)            
{
    foreach (Action c in _action.GetInvocationList())
    {
         _action -= c;
    }
}

特别是_action -= c;部分。

4

4 回答 4

23

一个委托可以是多个函数的委托。如果您有一个委托alpha给的委托Alpha()和一个委托给的beta委托,Beta()那么gamma = alpha + beta;就是一个调用Alpha()then的委托Beta()gamma - beta产生一个调用Alpha(). 坦率地说,这有点奇怪。

您发布的代码很奇怪。它说“遍历正在运行的函数列表,生成一大堆调用越来越少的函数的委托,然后最终分配一个对action.用它。nullaction

于 2013-03-13T17:52:51.507 回答
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
        }
}
于 2013-03-13T17:51:27.280 回答
3

它正在删除该操作的处理程序。

于 2013-03-13T17:49:43.040 回答
2

事件实际上是一个MultiCastDelegate. 当您“附加”一个事件处理程序时,它会添加对它的InvocationList.

上面的代码将 中的每个事件处理程序InvocationList与事件分离——本质上是“清除”事件,这也可以通过_action = null.

于 2013-03-13T17:52:19.800 回答