Unity委托事件

委托也就是delegate是一個(gè)引用類型,他相當(dāng)于一個(gè)裝著方法的容器,他可以把方法作為對(duì)象進(jìn)行傳遞。
在Unity中,我們想讓兩個(gè)類的方法產(chǎn)生關(guān)聯(lián),一旦觸發(fā)其中一個(gè)方法(更容易理解可以叫事件),便自動(dòng)觸發(fā)裝在其中的方法(觸發(fā)訂閱其中的方法)
很多時(shí)候,委托的合理運(yùn)用可以極大的減少代碼的運(yùn)行空間,比如可以不至于在Update里面一直監(jiān)測(cè),直到滿足條件觸發(fā)。
委托自然可以一對(duì)多。
簡(jiǎn)化方式,使用Action和Func來創(chuàng)建委托實(shí)例,一個(gè)無返回值一個(gè)有返回值。
lambda表達(dá)式是匿名方法的進(jìn)一步演化和簡(jiǎn)化,但是本身并非委托類型,不過它可以通過多種方式隱式或顯式轉(zhuǎn)換成一個(gè)委托實(shí)例。
協(xié)變性指的是方法的返回值類型可以是從委托的返回值類型派生的一個(gè)派生類,協(xié)變性描述的是委托的返回值類型。
逆變性指的是方法的參數(shù)類型可以是委托的參數(shù)類型的基類,逆變性描述的委托的參數(shù)類型。
關(guān)于事件,是委托的包裝,訂閱事件的時(shí)候本質(zhì)上是將委托類型的實(shí)例添加到委托列表中。事件只能被外部訂閱,不能在外部觸發(fā),也就是對(duì)事件的只能監(jiān)聽“+=”、移除”-=”。

比如上面的static類型事件event_ex,不能在外部直接調(diào)用OnClicked的委托實(shí)例。
(來源:https://zhuanlan.zhihu.com/p/84015453)