一、概念 委托的本質也是一種類型,類似於Class這樣。作用是將一個方法作為參數傳遞給另一個方法,關鍵字是delegate 二、委托的定義使用步驟 第一步聲明委托: public delegate int myDelegate(int a, int b); 1、聲明一個委托類型,可以用訪問修飾符修飾 ...
一、概念
委托的本質也是一種類型,類似於Class這樣。作用是將一個方法作為參數傳遞給另一個方法,關鍵字是delegate
二、委托的定義使用步驟
第一步聲明委托:
public delegate int myDelegate(int a, int b);
1、聲明一個委托類型,可以用訪問修飾符修飾public、private等,要有delegate關鍵字,可以有返回值和參數
2、委托所指向的函數必須跟委托具有相同的簽名,即相同的參數列表和返回值類型
第二步實例化委托並綁定方法:
myDelegate del1=new myDelegate( toAdd );//只寫方法名,不帶括弧和參數列表
或者:
myDelegate del1 =toAdd;
第三步執行委托:
del1( 3 , 4 );//括弧為參數列表
第四步寫綁定的方法:
1、方法必須為static靜態方法
2、方法必須有和所綁定委托一致的簽名,即相同的參數列表和返回值類型
如下:
static public int toAdd(int a, int b)//參數列表與委托定義必須一致
{
return a + b;//返回類型與委托定義必須一致
}
三、泛型委托(微軟內置委托)
實際上微軟已定義好一套泛型委托供我們使用,以免繁瑣重覆定義,它們分別是Action,Func和Predicate
Action: 此委托綁定的方法不能有返回值,方法可以有至多16個參數;
Func : 此委托綁定的方法可以有返回值。方法可以有至多16個參數;
Predicate: 此委托返回值為布爾型,方法只能又一個參數;
此部分內容稍後另一篇筆記詳細介紹
四、匿名委托
可以理解為省略了方法定義這步來調用委托。即沒有函數名,直接方法體。其中還可以使用lambda表達式來進一步簡化代碼量和提高執行效率
五、委托與線程的關係
委托與線程的關係就是沒有關係。很多初學者容易把委托理解為啟動新線程的一種方式,實際上他們之間沒有關係。比如在主線程里調用開始執行一個委托,則主線程就會進入這個委托進行執行,只到委托中的代碼執行完畢再返回主線程繼續執行後面的代碼。
WCF學習中、陸續更新筆記