引言
委託是一個類,它定義了方法的類型,使得可以將方法當作另一個方法的參數來進行傳遞,這種將方法動態地賦給參數的做法,可以避免在程式中大量使用If-Else(Switch)語句,同時使得程式具有更好的可擴展性。
詞語釋義
【詞語】:委託
【注音】:wěi tuō
【釋義】:1.將自己的事務囑託他人代為處理。2.交結,結納。3.猶依託,依靠。
引用類型
一種引用類型,它是 C++ 函式指針的託管版本。委託可以引用實例和靜態(在 Visual Basic 中為 Shared)方法,而函式指針只能引用靜態(在 Visual Basic 中為 Shared)方法。
在C#中,委託是一種可以把引用存儲為函式的類型。
委託的聲明非常類似於函式,但不帶函式體,且要使用delegate關鍵字。
委託的聲明指定了一個函式簽名,其中包含一個返回類型和參數列表。
在定義了委託後,就可以聲明該委託類型的變數。
接著將這個變數初始化為與該委託有相同簽名的函式引用。
之後,就可以使用委託變數調用這個函式,就像 該變數是一個函式一樣。
委託本質
在C#中使用delegate關鍵字定義委託,然後使用我們熟悉的函式調用的語法來調用委託,如上述例子中的cb(“skynet”,23)。在這簡單的表象背後,.NET編譯器為我們做了什麼呢?
可以知道定義CallBack委託時,編譯器為我們做了如下工作,實際上定義任何委託編譯器都會做如下工作:
聲明一個類,對應上圖中的.class nested public auto ansi sealed。
該類擴展自System.MulticastDelegate,對應上圖中的extends [mscorlib]System.MulticastDelegate。
該類包含一個構造器,對應上圖中的.ctor: void(object ,native int)。
該類包含三個方法,分別是BeginInvoke、EndInvoke、Invoke。
委託類
當我們用delegate關鍵字聲明委託時,編譯器自動為我們生成類。類的名字即為委託變數名,訪問類型為定義的委託訪問類型。如上例中,public delegate void CallBack(string name, int number);定義的委託對應的類為CallBack,訪問類型為public,該類繼承自[mscorlib]System.MulticastDelegate。如果我們定義委託的訪問類型為private或者protected,則對應的委託類的訪問類型為private或者protected。但是任何委託都繼承自[mscorlib]System.MulticastDelegate。
什麼是委託
首先要知道什麼是委託,用最通俗易懂的話來講,你就可以把委託看成是用來執行方法(函式)的一個東西。
如何使用委託
在使用委託的時候,你可以像對待一個類一樣對待它。即先聲明,再實例化。只是有點不同,類在實例化之後叫對象或實例,但委託在實例化後仍叫委託。