c#中事件基於委託,要理解事件要先理解委託,但是現在我還沒想好怎麼寫委託,如果不懂委託可以先找找委託的文章
事件基於委託,為委託提供了一種發布/訂閱機制
一上來就是這句話,很容易就懵了,我們先不管這句話,直接看例子
public class carinfoeventargs : eventargs
}
首先我們定義了乙個類carinfoeventargs
繼承自eventargs
類,定義了乙個建構函式和乙個唯讀屬性,其實這個類是不重要的
我們看下乙個類
public class cardealer
"); newcarinfo?.invoke(this, new carinfoeventargs(car));
}}
在這個類中,使用event
關鍵字定義了newcarinfo
事件
事件基於委託,newcarinfo
事件也是newcarinfo
委託,是eventhandler
型別的委託例項
然後定義了乙個newcar
方法,呼叫newcar
時當newcarinfo
不為null時觸發事件newcarinfo
我當時在這裡卡了很久,為什麼是newcarinfo?.invoke(this, new carinfoeventargs(car))
觸發事件,其實是我蠢了,newcarinfo.invoke(this, new carinfoeventargs(car))
和newcarinfo(this, new carinfoeventargs(car))
完全相同,學委託的時候忘了這一點,導致invoke
半天不知道什麼意思
下面再定義乙個consumer類
public class consumer
: car is new");
}
consumer
類定義了乙個方法newcarishere
這個方法的作用我們也不細說,接下來看重點
static void main()
在main方法中宣告了兩個consumer
類的例項valtteri
和max
宣告了乙個cardealer
類的例項dealer
從上面cardealer
類的定義我們知道,dealer
有乙個newcarinfo
的委託,有乙個newcar
的方法
dealer.newcarinfo += valtteri.newcarishere;
dealer.newcarinfo += max.newcarishere;
這兩行**為dealer
的newcarinfo
委託新增了兩個方法引用,即呼叫newcarinfo
委託時會執行這兩個方法,這就是發布/訂閱機制中的訂閱
當呼叫dealer.newcar
方法時,就會觸發newcarinfo
事件/委託,然後就會執行valtteri.newcarishere
和max.newcarishere
方法
一、有乙個類建立了乙個事件,定義了觸發事件的方法(cardealer
)
二、其他方法新增到事件委託中
dealer.newcarinfo += valtteri.newcarishere;
dealer.newcarinfo += max.newcarishere;
三、在合適的時候觸發事件,事件委託會執行新增到事件委託的其他方法
訂閱者給出乙個聯絡我的方法,然後註冊到事件委託中,觸發事件後事件委託呼叫訂閱者給出的聯絡方法
寫得不好的地方,請批評指正
注:本文中**示例來自《c#高階程式設計(第11版)
C 簡單的理解委託和事件
在c 中可以利用 函式指標 將對方法的引用作為實參傳遞給另乙個方法,而c 中可以利用委託提供相同的功能。但是委託實際上是乙個特殊的類。委託必須直接或間接的派生自system.delegate。實際的委託型別總是派生自system.multicastdelegate 建立委託的時候,編譯器自動繼承的是...
學習C 簡單理解事件
如果要閱讀這篇文章,建議先讀我的文章委託,如果你已了解委託,那麼忽略這段話即可。public delegate void playhandle public playhandel playevent 第一段 第一行宣告了乙個委託型別playhandle 第二行宣告了乙個委託變數playevent 之...
事件處理的簡單理解
定義乙個處理事件的委派類 private delegate void eventtesthandler string str 引數str可以有,也可以沒有 定義事件源,由此引發對事件的處理 private event eventtesthandler leadevent 在建構函式中新增事件觸發時,...