C#之委托詳解


C#之委托詳解


一、委托是什么


1.1委托的官方解釋:

委托是一種引用類型,表示對具有特定參數列表和返回類型的方法的引用。 在實例化委托時,你可以將其實例與任何具有兼容簽名和返回類型的方法相關聯。 你可以通過委托實例調用方法。

​ 委托用於將方法作為參數傳遞給其他方法。 事件處理程序就是通過委托調用的方法。 你可以創建一個自定義方法,當發生特定事件時,某個類(如 Windows 控件)就可以調用你的方法.

1.2委托的個人理解:

​ 委托和方法之間的關系是非常緊密的,可以認為委托就是某個方法的代理。
​ 委托也是C#當中的一種類型。具體來說,委托是一種引用方法的類型,一旦為委托分配了方法,委托將與該方法具有完全相同的行為。與其他的類不同,委托具有一個簽名,並且它只能對與其簽名匹配的方法進行引用。這樣,委托就等效於一個類型安全函數指針或一個回調。

完全相同的行為:指的是聲明的委托的簽名和參數類型必須和所代表的方法一致。

​ 舉個例子就是:你爸想要你幫他在冰箱里面拿一瓶酸奶,此時你爸就是這個委托的對象,而這個拿酸奶的動作就是一個方法(函數),而你爸並不想去拿這個酸奶,需要委托你去拿這個酸奶,所以說你爸就代理了你去做這件事情(也就是方法),這就是委托的作用,委托本身不去做任何的事情,只是指派別人去做。

二、委托的使用場景


2.1啟動線程:

​ 啟動線程——在C#中,可以告訴計算機並行運行某些新的執行任務序列。這種序列就稱為線程,在基類System.Threading.Thread的一個實例上使用方法Start(),就可以開始執行一個線程。而在開始這個執行序列時,必須為計算機提供開始執行的功能的細節,所以Thread類的構造函數必須帶有一個參數,該參數決定要由線程調用的方法。

2.2通用類:

​ 通用類——有許多通用類會包含執行各種標准任務的代碼。例如編寫一個類,該類需要提供能為任何對象數組排序的功能。在調用該功能之前,無法提前告訴計算機如何比較要排序的對象。因此,調用代碼必須給類傳遞某個可以進行這種比較的合適方法的細節。

2.3事件:

​ 事件——一般是通知代碼發生了什么事件。GUI編程主要是處理事件,在事件發生時,運行庫需要知道應執行哪個方法。這就需要把處理事件的方法傳送為委托的一個參數。

三、聲明委托


​ 首先聲明要使用的委托,對於委托,聲明它就是告訴編譯器這種類型的委托代表了哪種類型的方法。然后創建該委托的一個或多個實例。

​ 創建委托實例的語法如下:

委托名 委托實例名 = new 委托名(方法);

delegate  void  MethodInvoke(int  x)

​ 在上述語句中,聲明了一個委托,並指明了該委托所能代表的方法的細節,該方法必須帶有一個int類型的參數,且該方法不能有返回值(void)。理解委托的一個要點是他們的類型安全性非常高。在聲明委托時,必須給出它所能代表方法的方法簽名和返回類型等全部細節。

注意:實際上,“聲明一個委托”就是指“聲明一個新類”。委托的底層實現為派生自基類System.MulticastDelegate的子類System.MulticastDelegate又派生自基類System.Delegate。編譯器能夠識別委托這種“特殊”的類,會使用委托的語法而不是傳統類的語法,因此,我們不需要了解這個類的具體執行情況。這是C#與基類共同合作,使編程更容易完成的一個典型示例。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM