委託回調初識

來源:互聯網
上載者:User

我們知道定義一個委託之後,就可以像MyDelegate(3,7)這樣回調方法,其實每一個委派物件都是一個類對象,每一個委派物件中都有一個Invoke的同步成員方法(查MSDN得知),系統實際調用的是MyDelegate.Invoke(3,7).那麼Invoke的內部結構怎樣的呢?當然MSDN上面肯定查不出來了,琢磨了一下,可以模仿一下的嘛!

Invoke的內部實現(虛擬碼)

 1 sealed class MyDelegate:MultiCastDelegate //編譯器為我們產生的類
 2 {
 3    public  int Invoke(int x,int y)
 4    {
 5        int  result=0;
 6        Delegate[] delegates=this.GetInvocationList();//擷取委託列表(具體用法查看MSDN)
 7         foreach(Delegate dele in deledates)
 8        {
 9            result= dele.Method.Invoke(dele.Target,new object[]{x,y});//Method、Target為Delegate類型中的成員,分別表示委託方法和方法所屬對象,具體參考MSDN
10        }
11        return result;//返回委託鏈中最後一個傳回值
12    }
13    ………………………………//還有其他成員
14 }

 

其中GetInvocationList返回Delegate類型數組,Method為一個System.Reflection.MethodInfo類型變數,Target為Object對象,具體參考MSDN。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.