9yue7
委托? delegate
一、委托的概念
把方法作為一個(gè)參數(shù)來傳遞(方法是變化的)
二、聲明委托
訪問修飾符? delegate 返回值類型 委托類型名 (參數(shù)列表);
委托也是一種引用類型,和類一樣,需要我們自己來定義
定義時(shí)委托類型的返回值和參數(shù)與要引用的方法的返回值和參數(shù)一致,
二者在外形上一樣,只是委托用delegate修飾.
三、使用委托
委托三個(gè)步驟:1、委托聲明,
? ? ? ? ? ? ? ? ? ? ? ? GreetingDelegate greetingDelegate;
? ? ? ? ? ? ? ? ? ? ? ? 2、委托實(shí)例化 ,
? ? ? ? ? ? ? ? ? ? ? ? greetingDelegate = Test_1;
? ? ? ? ? ? ? ? ? ? ? ? 3、委托調(diào)用
? ? ? ? ? ? ? ? ? ? ? ? greetingDelegate();也可以這樣寫
也可以這樣寫:
// GreetingDelegate greetingDelegate = new GreetingDelegate (Test_1);
注:
委托類似于函數(shù)指針,但與函數(shù)指針不同的是,委托是面向?qū)ο蟮摹㈩愋桶踩暮捅kU(xiǎn)的。
委托既能引用靜態(tài)方法,也能引用實(shí)例方法。

委托要綁定的方法 參數(shù)、返回值必須一樣;
四、委托的定義
委托是一個(gè)類,它定義了方法的類型,使得可以將方法當(dāng)做另一方法的參數(shù)來進(jìn)行傳遞,也即是方法的參數(shù)是一個(gè)委托變量,
在調(diào)用此方法時(shí),就可以把一個(gè)方法做為參數(shù)傳遞給委托變量;
合并委托(多播)
調(diào)用一個(gè)委托就要調(diào)用委托的所有方法
委托可以+ - 綁定和解除綁定,多播委托包含已分配委托的列表。
在調(diào)用多播委托時(shí),它會(huì)按照順序調(diào)用委托方法,只能合并相同類型的委托
注:
當(dāng)委托綁定多個(gè)有返回值的方法時(shí),其結(jié)果是最后綁定的那個(gè)方法的返回值,
前面綁定方法的返回值會(huì)被最后綁定方法的返回值所覆蓋,所以使用委托時(shí)一般不帶返回值.
總結(jié):
一、委托和所引用的方法必須保持一致
1、參數(shù) (個(gè)數(shù)、類型、順序)必須完全一致
2、返回值類型必須一致
二、一個(gè)委托被同時(shí)映射到靜態(tài)方法和實(shí)例方法,并分別返回特定的信息;
四種形式的委托
兩種寫法(格式):
匿名(在方法只用一次,不用專門寫出方法時(shí)),Lamda
兩種系統(tǒng)定義的委托類型:
(方便于不用再定義變量)
Func要有返回值,Action沒有返回值。
委托傳入的值是根據(jù)方法來定的
一、匿名委托
用法:委托變量在綁定方法時(shí),是把方法名賦值給了委托變量名,
這樣就需要在類里面定義方法,而有些方法只用到了一次,
這樣的方法在類里面過多時(shí),程序的可讀性就不是太好,
針對這種情況,可以使用匿名委托,即不用在類里面額外定義方法.

格式:delegate(參數(shù)){要執(zhí)行的代碼};
參數(shù):相當(dāng)于綁定方法的參數(shù)
{};里面相當(dāng)于綁定方法的方法體
由于是賦值,是一個(gè)語句,后面的;不要省
二、Iamda表達(dá)式

格式:(參數(shù))=>{要執(zhí)行的代碼};
參數(shù):相當(dāng)于綁定方法的參數(shù)
{};里面相當(dāng)于綁定方法的方法體
由于是賦值,是一個(gè)語句,后面的;不要省
三、Func 委托

使用Func泛型,前面兩個(gè)是參數(shù)類型,最后一個(gè)是返回值類型,
其變量可以綁定匿名委托,lambda表達(dá)式和相同類型的方法,
此種委托一定會(huì)有返回值;
四、Action委托
格式

使用Action泛型,<>里面的類型是參數(shù)的類型,
該種委托可以綁定匿名委托,lambda表達(dá)式和方法,
但其一定沒有返回值