簡體   English   中英

正確使用Action和Events

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM