深入理解C#委托delegate的使用
1.什么是委托
委托就是委托某個(gè)方法來實(shí)現(xiàn)具體的功能,類似于:甲方委托乙方去實(shí)現(xiàn)需求;出租房屋人委托中介為其出租房屋。
委托是一種引用類型,從數(shù)據(jù)結(jié)構(gòu)上來講:委托和類一樣,都是一直用戶自定義類型。
2:委托的實(shí)現(xiàn)
委托是對(duì)方法的抽象和封裝。委托對(duì)象實(shí)質(zhì)上代表了方法的引用(即內(nèi)存地址)他存儲(chǔ)的就是一系列具有相同簽名和返回類型的方法的地址
可以理解為函數(shù)的一個(gè)包裝,它使得c#中的函數(shù)可以作為參數(shù)來被傳遞
使用時(shí)遵循三步走原則:定義委托、實(shí)例化委托,調(diào)用委托
調(diào)用委托時(shí),委托包含的方法將被執(zhí)行
委托有三種方法:命名方法委托、多播委托、匿名委托
命名法委托
1:定義委托
修飾符 delegate 返回值類型 委托名 {參數(shù)列表}
public delegate void FirstDelegate ();
靜態(tài)方法的實(shí)例化委托
2:實(shí)例化委托
委托名 委托對(duì)象名=new 委托名{方法名}
FirstDelegate firstDelegate=new FirstDelegate(Test.First);
委托的方法可以是靜態(tài)方法的名稱,也可以是實(shí)例化方法的名稱
方法:
public class Test
{
public static void First()
{
Console.WriteLine("第一次實(shí)現(xiàn)靜態(tài)方法類的委托");
}
}
3:調(diào)用
firstDelegate();
實(shí)例化方法的委托
2:實(shí)例化委托
委托名 委托對(duì)象名=new 委托名{方法名}
FirstDelegate firstDelegate=new FirstDelegate(new Test().First);
委托的方法可以是靜態(tài)方法的名稱,也可以是實(shí)例化方法的名稱
方法:
public class Test
{
public void First()
{
Console.WriteLine("第一次實(shí)現(xiàn)實(shí)例化方法類的委托");
}
}
3:調(diào)用
firstDelegate();
多播委托
多播委托就是一個(gè)委托中注冊(cè)多個(gè)方法,在注冊(cè)方法時(shí)可以在委托中通過加號(hào)或則減號(hào)來實(shí)現(xiàn)添加或者撤銷的方法。
例如 我想買飯吃 又想和奶茶 還想吃蛋糕,我委托一個(gè)人完不成,我需要委托三個(gè)人幫我完成,例如美團(tuán)
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("買個(gè)螺獅粉");
? ? }
? ? public void BuyCake()
? ? ?{
? ? ? Conssole.WriyeLine("買個(gè)蛋糕");
?
? ? }
? ? public void BuyTea()
? ? {
? ? ? ?Conssole.WriyeLine("買杯奶茶");
? ? }
?
??
}匿名委托
匿名委托就是 使用匿名的方法注冊(cè)在委托上 ,實(shí)際上就是委托中通過定義代碼塊來實(shí)現(xiàn)委拖的作用
1:定義委托
修飾符 delegate 返回值類型 委托名(參數(shù)列表)
2:實(shí)例化委托
委托名 委托對(duì)象=delegate
{
代碼塊;
};
3:調(diào)用匿名委托
委托對(duì)象(參數(shù)列表);
1:實(shí)現(xiàn)水果買賣
public class program
{
public delegate void BuyFruit(double price,double count)
static void main(string[] arg)
{
BuyFurit buyFruit=delegate
{
Console.WriteLine("水果總價(jià)為"+price*count);
};
buyFruit(3,5);
}
}什么時(shí)候適用委托
1:委托相當(dāng)于用方法作為另一方法參數(shù),同時(shí),也可以實(shí)現(xiàn)在兩個(gè)不能直接調(diào)用的方法中做橋梁,如在多線程中的跨線程的方法調(diào)用就得用委托。
2:委托使得一個(gè)方法可以作為另一個(gè)方法的參數(shù)進(jìn)行傳遞,這就是委托最大的作用。使用委托可以將同類型的方法綁定到同一個(gè)變量上,當(dāng)調(diào)用此變量時(shí)就可以一次調(diào)用綁定的方法,很方便。
到此這篇關(guān)于深入理解C#委托delegate的使用的文章就介紹到這了,更多相關(guān)C#委托delegate內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
c# WPF中System.Windows.Interactivity的使用
這篇文章主要介紹了c# WPF中System.Windows.Interactivity的使用,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下2021-03-03
C#如何將Access中以時(shí)間段條件查詢的數(shù)據(jù)添加到ListView中
這篇文章主要介紹了C# 將Access中以時(shí)間段條件查詢的數(shù)據(jù)添加到ListView中,需要的朋友可以參考下2017-07-07
C#中利用Lotus notes公共郵箱發(fā)送郵件的方法
這篇文章主要給大家介紹了關(guān)于C#中利用Lotus notes公共郵箱發(fā)送郵件的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2018-02-02
C#中委托的基礎(chǔ)入門與實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于C#中委托的基礎(chǔ)入門與實(shí)現(xiàn)方法的相關(guān)資料,究竟什么是委托,用最通俗易懂的話來講,你就可以把委托看成是用來執(zhí)行方法(函數(shù))的一個(gè)東西,需要的朋友可以參考下2021-08-08
C#實(shí)現(xiàn)Nginx平滑加權(quán)輪詢算法
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)Nginx平滑加權(quán)輪詢算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07
Winform消除button按下出現(xiàn)的虛線簡(jiǎn)單實(shí)現(xiàn)方法
這篇文章主要介紹了Winform消除button按下出現(xiàn)的虛線簡(jiǎn)單實(shí)現(xiàn)方法,通過重寫button設(shè)置Selectable參數(shù)實(shí)現(xiàn)該功能,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08

