怡春院av_国产精品久久久久久亚洲毛片_精品国产乱码一区二区三区_亚洲一区欧美日韩_亚洲黄色激情视频_国产全黄a一级毛片91_亚洲免费在线播放

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

2021-03-10
11044
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
主站蜘蛛池模板: 欧美激情一区二区三区 | 久久精品国产91久久麻豆自制 | 欧美一区二区三区不卡免费 | 亚洲成a人片在线v观看 | 国产精品视频人人做人人爱 | 亚洲三级在线视频 | 免费jizz在线播放视频高清版 | 国产高清特黄无遮挡大片 | 青青草免费观看 | 激情文学亚洲色图 | xxxx网| 轻轻色在线观看 | 国产三级网站 | 亚洲视频一区在线播放 | 九二淫黄大片看片 | 日日干夜夜艹 | 精品卡一卡2卡3卡4卡视乱 | 免费色视频网站 | 免费精品视频在线 | 亚洲欧美综合人成野草 | 三级网站在线看 | 免费人成又黄又爽的视频在线 | 国产一级免费视频 | 人人澡人人澡 | 国产成人综合在线观看网站 | 不卡视频在线播放 | 国产99久9在线 | 一级作爱视频免费观看 | 91视频99 | 免费在线国产视频 | 亚洲一线在线观看 | xxxww中国| 人人看人人澡 | 欧美午夜艳片欧美精品 | 亚洲看看 | 99久久婷婷国产综合精品hsex | 狠狠做狠狠做综合日日 | 男女污污黄无遮挡免费 | 日本手机在线视频 | 亚洲天堂在线播放 | 久久99精品国产麻豆不卡 |