C#中拜托(Delegates)的應用辦法詳解。本站提示廣大學習愛好者:(C#中拜托(Delegates)的應用辦法詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是C#中拜托(Delegates)的應用辦法詳解正文
1. 拜托是甚麼?
其實,我一向思慮若何講授拜托,能力把拜托說得更透辟。說真話,每一個人都拜托都有分歧的看法,由於看成績的角度分歧。小我以為,可以從以下2點來懂得:
(1) 從數據構造來說,拜托是和類一樣是一種用戶自界說類型。
(2) 從設計形式來說,拜托(類)供給了辦法(對象)的籠統。
既然拜托是一品種型,那末它存儲的是甚麼數據?
我們曉得,拜托是辦法的籠統,它存儲的就是一系列具有雷同簽名和前往回類型的辦法的地址。挪用拜托的時刻,拜托包括的一切辦法將被履行。
2. 拜托類型的界說
拜托是類型,就似乎類是類型一樣。與類一樣,拜托類型必需在被用來創立變量和類型對象之前聲明。
delegate void MyDel(int x);
拜托類型聲明:
(1) 以deleagate症結字開首。
(2)前往類型+拜托類型名+參數列表。
3. 聲明拜托變量
MyDel del1,del2;
4. 初始化拜托變量
(1) 應用new運算符
new運算符的操作數的構成以下:
拜托類型名
一組圓括號,個中包括作為挪用列表中的第一個成員的辦法的名字。辦法可所以實例辦法或靜態辦法。
del1 = new MyDel( myInstObj.MyM1 ); del2 = new MyDel( SClass.OtherM2 );
(2)應用快捷語法
快鍵語法,它僅由辦法解釋符組成。之所以能如許,是由於在辦法稱號和其響應的拜托類型之間有隱式轉換。
del1 = myInstObj.MyM1; del2 = SClass.OtherM2;
5. 賦值拜托
因為拜托是援用類型,我們可以經由過程給它賦值來轉變包括在拜托變量中的辦法地址援用。舊的援用會被渣滓收受接管器收受接管。
MyDel del; del = myInstaObj.MyM1; //拜托初始化 del = SClass.OtherM2;//拜托從新賦值,舊的援用將被收受接管
6. 組合拜托
拜托可使用額定的運算符來組合。這個運算終究會創立一個新的拜托,其挪用列表是兩個操作數的拜托挪用列表的正本的銜接。
拜托是恆定的,操作數拜托創立後不會被轉變。拜托組合拷貝的是操作數的正本。
MyDel del1 = myObj.MyMethod; MyDel del2 = SClass.OtherM2; MyDel del3 = del1 + del2; //組合挪用列表
7. 拜托加減運算
可使用+=運算符,為拜托新增辦法。
異樣可使用-=運算符,為拜托移除辦法。
MyDel del = myObj.MyMethod; del += SClass.OtherM2; // 增長辦法 del -= myObj.MyMethod; // 移除辦法
8. 拜托挪用
拜托挪用跟辦法挪用相似。拜托挪用後,挪用列表的每一個辦法將會被履行。
在挪用拜托前,應斷定拜托能否為空。挪用空拜托會拋出異常。
if(null != del) { del();//拜托挪用 }
9. 匿名辦法
匿名辦法是在初始化拜托時內聯聲明的辦法。
根本構造:
deleage( 參數 ) { 語句塊 }
例如:
delegate int MyDel (int x); //界說一個拜托 MyDel del = delegate( int x){ return x; };
從下面我們可以看到,匿名辦法是不會顯示聲明前往值的。
10. Lambda表達式
Lambda表達式重要用來簡化匿名辦法的語法。在匿名辦法中,delegate症結字有點過剩,由於編譯器曾經曉得我們將辦法賦值給拜托。經由過程幾個簡略步調,我們便可以將匿名辦法轉換為Lambda表達式:
刪除delegate症結字
在參數列表和匿名辦法主體之間防Lambda運算符=>。Lambda運算符讀作”goes to”。
MyDel del = delegate( int x) { return x; };//匿名辦法 MyDel del2 = (int x) => {return x;};//Lambda表達式 MyDel del3 = x => {return x};//簡寫的Lambda表達式
以上就是本文的全體內容,願望對年夜家進修C#法式設計有所贊助。