C#關(guān)于Func和Action委托的介紹詳解_第1頁
C#關(guān)于Func和Action委托的介紹詳解_第2頁
C#關(guān)于Func和Action委托的介紹詳解_第3頁
C#關(guān)于Func和Action委托的介紹詳解_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第C#關(guān)于Func和Action委托的介紹詳解輸出結(jié)果:

由于btn_Click為點(diǎn)擊事件,點(diǎn)擊第二次(第二次點(diǎn)擊會(huì)再次向委托添加事件)的數(shù)據(jù)結(jié)果如下:

因此,向委托添加事件時(shí),一個(gè)事件僅添加一次即可,若進(jìn)行多次添加則調(diào)用委托時(shí)會(huì)將添加進(jìn)入委托的所有事件進(jìn)行調(diào)用,無論該事件是否已添加都會(huì)進(jìn)行調(diào)用,故做如下處理(在構(gòu)造函數(shù)中或在程序啟動(dòng)時(shí)添加委托事件):

上圖中委托調(diào)用時(shí)提示波浪線,因?yàn)槭俏性谡{(diào)用時(shí)可能未添加事件,將會(huì)拋出:未將對(duì)象引用設(shè)置到對(duì)象的實(shí)例的異常信息,

異常信息:

故調(diào)用時(shí)進(jìn)行異常處理或做如下處理:

處理方案1:

privatevoidbutton1_Click(objectsender,EventArgse)

Action_0.Invoke();

Action_1.Invoke(666);

Action_2.Invoke(666,888.0);

Action_3.Invoke(666,888,"HelloWorld");

處理方案2

//執(zhí)行委托

privatevoidbutton1_Click(objectsender,EventArgse)

Action_0.Invoke();

Action_1.Invoke(666);

Action_2.Invoke(666,888.0);

Action_3.Invoke(666,888,"HelloWorld");

catch(Exceptionex)

MessageBox.Show("調(diào)用出現(xiàn)異常","提示");

此時(shí),我們已經(jīng)學(xué)會(huì)了Action委托的簡(jiǎn)單使用,這時(shí)會(huì)有人考慮到,我想調(diào)用完返回信息Action委托并沒有返回,會(huì)限制我們的使用,不要著急,我們系統(tǒng)已經(jīng)幫我們準(zhǔn)備了一個(gè)現(xiàn)成的委托類型Func,下面我們對(duì)Func做個(gè)介紹。

2.Func委托

話不多說,上代碼,以下我們定義了包含兩個(gè)參數(shù)int和double,返回值為string類型的Func委托,并添加了兩個(gè)事件Fun_1和Fun_2:

publicpartialclassForm1:Form

///summary

///包含兩個(gè)參數(shù)int和double,返回值為string類型委托

////summary

privateeventFuncint,double,stringTestFunc;

///summary

///定義委托的事件

////summary

privatestringFun_1(intnInt,doubledDouble)

Console.WriteLine($"參數(shù)值:{nInt},{dDouble}");

return"事件:Fun_1";

///summary

///定義委托的事件

////summary

privatestringFun_2(intnInt,doubledDouble)

Console.WriteLine($"參數(shù)值:{nInt},{dDouble}");

return"事件:Fun_2";

///summary

///窗體構(gòu)造函數(shù)

////summary

publicForm1()

InitializeComponent();

InitAction();

//向委托添加事件

privatevoidInitAction()

TestFunc+=Fun_1;

TestFunc+=Fun_2;

//執(zhí)行委托

privatevoidbutton1_Click(objectsender,EventArgse)

varresult=TestFunc.Invoke(888,10);

Console.WriteLine($"返回結(jié)果:{result}");

輸出結(jié)果:

從輸出結(jié)果不難看出向委托添加多個(gè)事件(委托的多播或組播),委托包含返回值時(shí),僅得到最后向委托添加的事件(方法)的返回值,所以在使用有返回值時(shí)必須注意這一點(diǎn)。

以下為先添加Fu

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論