[英]Correct usage of Action and Events
我對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
沒有任何action
的委托。為什么地球上任何人都會這樣做?只需為action
指定null
並完成它。
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
來完成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.