我有点新,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
.用它。null
action
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
.