91久久九色_99精品在线免费_91精品欧美一区二区三区_成人一级毛片_国产精品久久久久免费视频_99精彩视频在线观看

如何理清 C# 委托、事件、Action、Func?

2021-03-10
11038
1

想要理清 C#委托、事件、Action、Func 這些名詞的區別,我們先搞清楚他們的關系。

 

第一步

 

所有的名詞,都是基于委托產生的,所以這個委托其實就是基礎,先要明白什么是委托。

 

委托的關鍵詞是 delegate ,具體在代碼中的使用方法如下:

 

 

為了方便新人理解,這里我直接用通俗點點方式說一下什么是委托:

 

委托實際上是函數的模板。此模板可用于放入具有相同格式的各種函數,即對這些實函數的引用。這就像聲明一個int變量public int Testint;然后可以為這個Testint賦值。只要它是一個整數,它實際上就是一個模板。只是你放入的只能是整數罷了,委托也可以用這種思路去理解。實際上,就是將函數放在模板格式中,這樣就可以通過模板直接調用要調用的函數。至于為什么要這么做,我們一起來看看:

 

第二步

 

我們現在知道了什么是委托,接下來說事件,其實事件就是委托的一種特殊封裝,事件本身其實就是一種特殊的委托。

 

為了方便大家快速理解,直接上代碼,先來看下普通的委托如何使用:

 

 

這張圖簡單的說了一下委托的用法,那么事件其實就是在上圖的使用過程中加了一個關鍵字event,如圖:

 

 

細心的學生應該發現,使用和不添加似乎沒有區別。是的,看起來是這樣的,但在實際使用過程中,如果添加了event,其他類中帶有event字段的delegation不能直接使用=賦值符號,只能使用 =。注意,在其他類中,如果您直接在聲明事件的類中,那么仍然可以直接使用=assignment。

 

又有同學要問啦,

 

為什么呢?其實原因也很簡單,當你在委托聲明的時候加了 event 字段之后,直接賦值的操作會變成 private 權限,那么自然在其他類中就無法直接賦值了,為什么 = 和 - = 就可以呢?那是因為 = 和 - = 重寫變成了 add 和 remove 的方法,是 public 的,所以可以在外部調用,想了解底層的同學也可以查找相關資料。

 

總之一句話,事件就是特殊的委托,直觀的區別就是在外部類中無法直接使用 = 賦值,在我看來好處就是防止外部直接賦值導致所有的注冊丟失,有一定的安全性。

 

第三步

 

我們現在知道了什么是委托,什么是事件,終于要搞明白什么是 Action、Func 啦!

 

慣例,先來看看 C# 中是怎么使用 Action、Func 的吧!上代碼:

 

 

用法我簡單的寫了一下,其實 Action 就是一個 System 庫自帶的已經幫你聲明好的委托,因為我使用 Action 的時候并沒有聲明 delegate 這一步的操作,而是直接使用 public Action test Action1 來聲明使用,看到這里迷惑的你是不是已經大概清楚了呢?為了讓你看的更明白,我直接把 Action 到底是個啥寫幾個事例出來:

 

public delegate void Action();
public delegate void Action<in T1 >(T1 arg1);
public delegate void Action<in T1 ,in T2>(T1 arg1,T2 arg2);
public delegate void Action<in T1 ,in T2,in T3>(T1 arg1,T2 arg2,T3 arg3);
…….. 

 

一直寫到 16 個參數。

 

其實這些代碼就是 Action 的聲明,只是寫在了系統自帶的庫里,所以我們才能直接拿來用,其實就是系統幫我們做了第一步,我們可以直接用,很方便。

 

Func 同理,只是把 void 換成了帶有返回值的而已。

 

而且系統還貼心的幫我們加了泛型參數,這樣使用起來就更方便了,可以使用任何我們自定義的參數,只要參數數量匹配即可。

 

 

轉載聲明:本文來源于網絡,不作任何商業用途

免責聲明:本文內部分內容來自網絡,所涉繪畫作品及文字版權與著作權歸原作者,若有侵權或異議請聯系我們處理。
收藏

全部評論

您還沒登錄

暫無留言,趕緊搶占沙發
繪學霸是國內專業的CG數字藝術設計線上線下學習平臺,在繪學霸有2D繪畫、3D模型、影視后期、動畫、特效等數字藝術培訓課程,也有學習資源下載,還有行業社區交流。學習、交流,來繪學霸就對了。
繪學霸iOS端二維碼

IOS下載

繪學霸安卓端二維碼

安卓下載

繪學霸微信小程序二維碼

小程序

版權聲明
本網站所有產品設計、功能及展示形式,均已受版權或產權保護,任何公司及個人不得以任何方式復制部分或全部,違者將依法追究責任,特此聲明。
熱線電話
18026259035
咨詢時間:9:00~21:00
在線客服
聯系網站客服
客服微信:18026259035
公司地址
中國·廣州
廣州市海珠區曉港中馬路130號之19
繪學霸客戶端(權限暫無,用于CG資源與教程交流分享)
開發者:廣州王氏軟件科技有限公司 | 應用版本:Android:6.0,IOS:5.1 | App隱私政策> | 應用權限 | 更新時間:2020.1.6
主站蜘蛛池模板: 精品国产乱码久久久久久牛牛 | 又湿又紧又大又爽a视频国产 | 亚洲福利一区 | 色诱亚洲精品久久久久久 | 国产精品亚洲一区二区三区在线 | 久久网站热最新地址 | 涩涩导航 | 99精品小视频 | 国产又黄又爽又色在线视频播放 | 国产精品久久久久久久久久久免费看 | 中文字幕一区二区三区乱码在线 | 男人午夜影院 | 欧美顶级大胆免费视频 | 欧洲国产一区 | 99成人精品视频 | 欧美三级在线视频 | 久久久精彩视频 | 99久久精品免费看蜜桃的推荐词 | 精品一区二区不卡 | 久久成人综合 | 久久久精品在线 | 久久久久免费 | 男人天堂av网| 夜夜av| 成人av福利| 久久国产精品久久久久久久久久 | 九九视频在线 | 欧美激情精品久久久久久 | 欧美一级淫片 | 国产精品亚洲视频 | 啪啪av | 中文字幕国 | 国产精品欧美在线 | 精品视频免费在线 | a爱视频| 麻豆视频成人 | 欧美日本韩国一区二区三区 | 久久久国产精品一区二区三区 | 欧美性一区二区 | 不卡av电影在线 | 欧美一区二区在线看 |