我有點新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