我有点新,c#所以如果你觉得它微不足道,请忽略。我看到了以下“奇怪”的代码。
任何人都可以对此有所了解。
public event Action _action;
if (_action != null)
{
foreach (Action c in _action.GetInvocationList())
{
_action -= c;
}
}
特别是_action -= c;部分。
一个委托可以是多个函数的委托。如果您有一个委托alpha给的委托Alpha()和一个委托给的beta委托,Beta()那么gamma = alpha + beta;就是一个调用Alpha()then的委托Beta()。 gamma - beta产生一个调用Alpha(). 坦率地说,这有点奇怪。
您发布的代码很奇怪。它说“遍历正在运行的函数列表,生成一大堆调用越来越少的函数的委托,然后最终分配一个对action.用它。nullaction
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
}
}
它正在删除该操作的处理程序。
事件实际上是一个MultiCastDelegate. 当您“附加”一个事件处理程序时,它会添加对它的InvocationList.
上面的代码将 中的每个事件处理程序InvocationList与事件分离——本质上是“清除”事件,这也可以通过_action = null.