網站首頁 編程語言 正文
1.什么是委托
委托就是委托某個方法來實現具體的功能,類似于:甲方委托乙方去實現需求;出租房屋人委托中介為其出租房屋。
委托是一種引用類型,從數據結構上來講:委托和類一樣,都是一直用戶自定義類型。
2:委托的實現
委托是對方法的抽象和封裝。委托對象實質上代表了方法的引用(即內存地址)他存儲的就是一系列具有相同簽名和返回類型的方法的地址
可以理解為函數的一個包裝,它使得c#中的函數可以作為參數來被傳遞
使用時遵循三步走原則:定義委托、實例化委托,調用委托
調用委托時,委托包含的方法將被執行
委托有三種方法:命名方法委托、多播委托、匿名委托
?命名法委托
1:定義委托
修飾符 delegate 返回值類型 委托名 {參數列表}
public delegate void FirstDelegate ();
靜態方法的實例化委托?
2:實例化委托
委托名 委托對象名=new 委托名{方法名}
FirstDelegate firstDelegate=new FirstDelegate(Test.First);
委托的方法可以是靜態方法的名稱,也可以是實例化方法的名稱
方法:
public class Test
{
public static void First()
{
Console.WriteLine("第一次實現靜態方法類的委托");
}
}
3:調用?
firstDelegate();
實例化方法的委托
2:實例化委托
委托名 委托對象名=new 委托名{方法名}
FirstDelegate firstDelegate=new FirstDelegate(new Test().First);
委托的方法可以是靜態方法的名稱,也可以是實例化方法的名稱
方法:
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:委托使得一個方法可以作為另一個方法的參數進行傳遞,這就是委托最大的作用。使用委托可以將同類型的方法綁定到同一個變量上,當調用此變量時就可以一次調用綁定的方法,很方便。
原文鏈接:https://blog.csdn.net/hyyjiushiliangxing/article/details/126023406
相關推薦
- 2022-05-22 vscode調試container中的程序的方法步驟_相關技巧
- 2022-10-15 Golang官方限流器庫實現限流示例詳解_Golang
- 2023-03-28 Linux版本中Nginx平滑升級與回退_nginx
- 2022-11-24 Python?Django中間件詳細介紹_python
- 2022-05-10 thymeleaf跳轉到響應頁面(modelandview 中的view)
- 2022-04-22 SketchUp:解決鏡頭剪切屏幕出現破面視角的問題圖文教程
- 2022-01-16 jQuery 核心函數和動態更新員工表
- 2022-07-11 gstreamer的消息傳遞機制
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支