C#委託和事件的區別

「委託是具備相同簽名的函數(方法)的類型,事件是委託的應用方式之一」 ---來自評論區老司機函數

delegate 是爲了在C#中把函數做爲對象傳來傳去而實現的一個「函數包裝」。因爲在C#中函數是二等公民,你不能把它定義在class的層級上,也不能把它做爲對象來傳遞。所以平臺提供了一個盛放函數的「容器「,當你聲明瞭一個這樣的容器後,它裏面就能夠放進全部和你聲明時簽名一致的函數或方法。
由於每次聲明和建立委託都是在作重複性的工做,不符合OOP的氣質,微軟提供了泛型委託:
Action  無參沒有返回值的委託
Action<> 沒有返回值的泛型委託
Func<> 有返回值的泛型委託
Predicate<> 返回bool值,一個參數

等價於:public delegate typeA MyDelegate(typeB b,typeC c); MyDelegate thisDelegate = (i,j) => new typeA();
Func<typeB,TypeC,TypeA> thisDelegate = (i,j) => new typeA(); //前兩個是參數,最後一個是返回值類型


C#中的event不是一個類型,而是與「字段」、"屬性「、」方法「 並列的類成員之一。能夠理解爲delegate是一個類,event是delegate類下的一個字段。event是delegate的應用方式之一。
事件是類或對象向其餘類或對象通知發生的事情的一種特殊簽名的委託。
事件的+=、-=操做符能夠在類的外部使用,調用事件只能在聲明事件的類的內部使用。
相關文章
相關標籤/搜索