c 委託的學習日記

2021-04-13 23:56:23 字數 1673 閱讀 7740

曾經對委託和事件非常頭疼,好在現在以自己的方式入門了,就行以自己的方式把它過一遍,當作學習日記吧。

委託(delegate)是一種引用型別,我們在處理他的時候要當作類來看待而不是方法,說白了委託就是對方法或者方法列表的引用,呼叫乙個委託例項就好像是呼叫c++中的指標一樣,他封裝了對制定方法的引用,或者說委託起到的是橋梁的作用,例項後的委託物件會將給定的引數傳遞給他所**的方法,並去執行方法。

看乙個簡單的例子:

//宣告乙個委託

delegate int mydelegatehandler(int a, int b);

public class a

}//入口類

public class b}

上面是乙個非常簡單的例子,具體的實現步驟:

1、 先宣告個委託例項  ;

2、然後提供要處理的方法;

3、再例項化委託(把委託看作是類的話,例項化委託就不難理解了,其引數是要處理的方法,這裡的方法 不用加括號,例項化的過程就是裝載方法的過程,就好像需要引數的建構函式一樣)例項化後的委託物件就好比是c++中的指標,它本身就是封裝了方法的物件;

4、最後我們呼叫委託物件就好比是呼叫了被封裝方法本身,呼叫時的引數也就傳給了被封裝的方法。

5、需要注意的是 所宣告的委託無論是 引數個數,引數型別,返回值型別 都要和所要封裝的方法保持一致,當呼叫委託例項物件時,所傳入的引數也要保持一致 ,否則會出現錯誤。

委託鏈

我們知道委託是對方法的封裝,而且委託可以封裝很多方法形成委託鏈,其實委託就好像是乙個容器,他封裝了我們想要實現的若干方法,當呼叫委託物件(相當於c++中的指標)時,就會順序的執行它所封裝的所有的方法,如果有返回值的話,往往返回的是最後乙個被執行的方法的返回值,委託鏈的形成可以用"+="或"-="對不同的委託例項進行二元操作。

委託鏈例項:

//定義乙個委託

public delegate void printhandler(string message);

public class printprovider1 }

public class printprovider2 }

class delegate1

public static void main()

catch (nullreferenceexception ex)

console.writeline("試圖從null中移出委託是無效操作");

trycatch (nullreferenceexception ex)

console.read(); }

}執行結果

委託例項prn1的列印結果

委託鏈1111111

委託例項prn2的列印結果

委託鏈2222222

委託例項prn1+prn2的列印結果

委託鏈1111111

委託鏈2222222

委託例項prn1+prn2+prn3的列印結果

委託鏈1111111

委託鏈2222222

委託鏈3333333

委託例項prn1+prn3的列印結果

委託鏈1111111

委託鏈3333333

委託例項prn3的列印結果

委託鏈3333333

試圖呼叫null委託會引發異常

未將物件引用設定到物件的例項。

試圖從null中移出委託是無效操作

C 學習日記 委託 事件

我個人的理解就是 委託裡放著 要傳遞的方法,乙個或者多個方法。一開始並不知道要執行什麼方法,所以把方法當做引數傳遞。委託裡的方法可以是私有的也可以是靜態的。如果委託的方法用到了外部的變數就叫做閉包。如果在foreach中每次方法傳遞每次的迭代的變數,也不會出現錯誤,因為c 5.0中自己會建立不同的變...

日記 執行緒 委託學習

好久沒有寫日記了,以前都是記下年記得,呵呵 前段時間專案忙完了,現在有些時間自己學習,提高下技術,補充能量,在下次的專案中就可以應用新學的技術來改善系統的效率 可讀性 等等。今天學習了執行緒和委託 感覺執行緒還是很有用處的,隨著接下來幾天的學習,我會把學習的收穫記錄下來,看著自己一步步的成長是一件很...

C 委託的學習

看完 這一篇文章,大致了解了委託的概念,在此進行總結 首先 滿足乙個需求,根據客戶需要用不同語言版本輸出早上好,如果用列舉 會很複雜,這裡用委託會顯得很簡潔 委託 namespace 委託實現測試 private static void chinesegreeting string name 委託的...