c#中委托的使用小結。
一、簡述:
委托對與我們程式設計人員來說,一點都不陌生,在實際工作過程中,或多或少都應該是接觸過
但是對與程式設計新手來說,對與委托的了解和使用應該還是一個坎,但是隻要了解清楚了,這個坎也就過去了。
最近也經常有人在問關于委托的使用的相關問題,在此我花點時間,對與委托的個人了解進行一個總結,希望能夠給大家有所幫助作用。
二、定義:
委托,其實在我們日常生活中,也經常用到委托的,比如:律師其實就是充當了一個委托的角色,當事人委托律師在法庭上對其訴訟辯護。
在c#中,委托簡單的了解就是将一個方法以參數的形式傳遞到另外一個方法中去,有點類似于c++中的指針的概念。
三、實作委托的步驟:
在委托定義的時候,我們隻需要定義一個結構體,至于具體的實作,需要在具體的委托方法中來實作。
實作委托的步驟,我總結如下:
其一、定義:要聲明一個委托的結構體:delegate void Mydelegate(type1 para1,type2 para2);
其二、聲明:聲明就是要聲明一個委托變量:Mydelegate myDel;
其三、執行個體化:就是要對聲明的委托對象執行個體化具體的委托方法:myDel=new Mydelegate(obj.InstanceMethod);
其四、參數傳遞:簡單的了解,就是将委托以一個參數的形式傳遞給一個方法:MyMethod(myDel);
其五、委托方法執行:這個和普通方法實作調用一樣,就是在方法MyMethod裡面調用執行委托的方法:myDel(obj.InstanceMethod)
四、使用
委托的使用,根據平時的開經驗,委托其實在實際的使用中,有兩種場景:
其一、同步使用:同步執行委托,阻塞主流程(和平時的方法執行效果一樣)
其二、異步使用:不阻塞主流程的執行,異步線程去執行委托方法裡面的邏輯
委托結合反射的使用:這中情況的使用場景是:當不同的委托其對于的參數個數或者參數類型不盡相同,那麼這時候就在調用委托方法時,就不能簡簡單單的調用執行
這種情況在實際工作中場景舉例:比如我們在使用緩存機制時候,都要使用到委托通反射相結合使用。
五、小結:
從上面的委托代碼中可以發現,引入委托後,程式設計人員可以把方法的引用封裝在委托對象中
(把過程的調用轉化為對象的調用,充分展現了委托加強了面向對象程式設計的思想。),
然後把委托對象傳遞給需要引用方法的代碼,這樣在編譯的過程中我們并不知道調用了哪個方法,
這樣一來,C#引入委托機制後,使得方法聲明和方法實作的分離,充分展現了面向對象的程式設計思想。