我有点新c#
所以请,如果你发现它琐碎忽视。我看到以下“怪异”代码。行动的正确使用和活动
任何人都可以阐明这一点光。
public event Action _action;
if (_action != null)
{
foreach (Action c in _action.GetInvocationList())
{
_action -= c;
}
}
特地_action -= c;
部分。
我有点新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()
然后Beta()
的委托。 gamma - beta
产生一个代表,调用Alpha()
。这是一个奇怪的功能,完全坦白。
你已经发布的代码是离奇。它说:“经过在行动功能列表中,产生代表一个整体一堆调用越来越少的功能,然后最后一个代表,什么也不做分配给action
。究竟为什么会有人这样做?只是分配null
到action
并用它做
这是删除操作的处理程序。
这是一个无益的答案 – 2013-03-13 17:50:39
@SamIam:是?这正是OP所要求的。 – 2013-03-13 17:51:26
@SamIam - yup - 正是它做的。 – 2013-03-13 17:52:13
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
来完成。
看一看这太问题:http://stackoverflow.com/questions/447821/how-do-i-unsubscribe-all-handlers-from-an-event-for-a - 特别级 - 在-c中 – 2013-03-13 17:51:28
检查出http://stackoverflow.com/questions/1431359/event-action-vs-event-eventhandler的动作vs EventHandler的概述 – PHeiberg 2013-03-13 18:04:18