深入理解C#委托delegate的使用
1.什么是委托
委托就是委托某個方法來實現具體的功能,類似于:甲方委托乙方去實現需求;出租房屋人委托中介為其出租房屋。
委托是一種引用類型,從數據結構上來講:委托和類一樣,都是一直用戶自定義類型。
2:委托的實現
委托是對方法的抽象和封裝。委托對象實質上代表了方法的引用(即內存地址)他存儲的就是一系列具有相同簽名和返回類型的方法的地址
可以理解為函數的一個包裝,它使得c#中的函數可以作為參數來被傳遞
使用時遵循三步走原則:定義委托、實例化委托,調用委托
調用委托時,委托包含的方法將被執(zhí)行
委托有三種方法:命名方法委托、多播委托、匿名委托
命名法委托
1:定義委托
修飾符 delegate 返回值類型 委托名 {參數列表}
public delegate void FirstDelegate ();
靜態(tài)方法的實例化委托
2:實例化委托
委托名 委托對象名=new 委托名{方法名}
FirstDelegate firstDelegate=new FirstDelegate(Test.First);
委托的方法可以是靜態(tài)方法的名稱,也可以是實例化方法的名稱
方法:
public class Test { public static void First() { Console.WriteLine("第一次實現靜態(tài)方法類的委托"); } }
3:調用
firstDelegate();
實例化方法的委托
2:實例化委托
委托名 委托對象名=new 委托名{方法名}
FirstDelegate firstDelegate=new FirstDelegate(new Test().First);
委托的方法可以是靜態(tài)方法的名稱,也可以是實例化方法的名稱
方法:
public class Test { public void First() { Console.WriteLine("第一次實現實例化方法類的委托"); } }
3:調用
firstDelegate();
多播委托
多播委托就是一個委托中注冊多個方法,在注冊方法時可以在委托中通過加號或則減號來實現添加或者撤銷的方法。
例如 我想買飯吃 又想和奶茶 還想吃蛋糕,我委托一個人完不成,我需要委托三個人幫我完成,例如美團
1:定義委托
public class problem { ? ? ?public delegate void BuyDelegate(); ? ? ? ? ?static void mian() ? ? ?{ ? ? ? ? ?BuyDelegate buyDelegate=new BuyDelegate(Buy.BuyFood); ? ? ? ? ?buyDelegate+=Buy.BuyCake; ? ? ? ? ?buyDelegate+=Buy.BuyTea; ? ? ? ? ? ?buyDelegate(); ? ? ?} } ? public class Buy { ? ? public void BuyFood() ? ? { ? ? ? Conssole.WriyeLine("買個螺獅粉"); ? ? } ? ? public void BuyCake() ? ? ?{ ? ? ? Conssole.WriyeLine("買個蛋糕"); ? ? ? } ? ? public void BuyTea() ? ? { ? ? ? ?Conssole.WriyeLine("買杯奶茶"); ? ? } ? ?? }
匿名委托
匿名委托就是 使用匿名的方法注冊在委托上 ,實際上就是委托中通過定義代碼塊來實現委拖的作用
1:定義委托
修飾符 delegate 返回值類型 委托名(參數列表)
2:實例化委托
委托名 委托對象=delegate
{
代碼塊;
};
3:調用匿名委托
委托對象(參數列表);
1:實現水果買賣
public class program { public delegate void BuyFruit(double price,double count) static void main(string[] arg) { BuyFurit buyFruit=delegate { Console.WriteLine("水果總價為"+price*count); }; buyFruit(3,5); } }
什么時候適用委托
1:委托相當于用方法作為另一方法參數,同時,也可以實現在兩個不能直接調用的方法中做橋梁,如在多線程中的跨線程的方法調用就得用委托。
2:委托使得一個方法可以作為另一個方法的參數進行傳遞,這就是委托最大的作用。使用委托可以將同類型的方法綁定到同一個變量上,當調用此變量時就可以一次調用綁定的方法,很方便。
到此這篇關于深入理解C#委托delegate的使用的文章就介紹到這了,更多相關C#委托delegate內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
淺談C#下winform和JS的互相調用和傳參(webbrowser)
下面小編就為大家?guī)硪黄獪\談C#下winform和JS的互相調用和傳參(webbrowser)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-12-12c#封裝百度web服務geocoding api 、百度坐標轉換示例
這篇文章主要介紹了c#封裝百度Web服務geocoding api 、百度坐標轉換,需要的朋友可以參考下2014-04-04結合Visual C#開發(fā)環(huán)境講解C#中事件的訂閱和取消訂閱
這篇文章主要介紹了C#中事件的訂閱和取消訂閱,結合Visual C#開發(fā)環(huán)境來進行講解,Visual C#被集成在微軟的IDE程序Visual Studio中,需要的朋友可以參考下2016-01-01