C 中事件流程的簡單理解

2022-06-20 08:00:16 字數 2249 閱讀 3228

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類的例項valtterimax

宣告了乙個cardealer類的例項dealer

從上面cardealer類的定義我們知道,dealer有乙個newcarinfo的委託,有乙個newcar的方法

dealer.newcarinfo += valtteri.newcarishere;

dealer.newcarinfo += max.newcarishere;

這兩行**為dealernewcarinfo委託新增了兩個方法引用,即呼叫newcarinfo委託時會執行這兩個方法,這就是發布/訂閱機制中的訂閱

當呼叫dealer.newcar方法時,就會觸發newcarinfo事件/委託,然後就會執行valtteri.newcarisheremax.newcarishere方法

一、有乙個類建立了乙個事件,定義了觸發事件的方法(cardealer

二、其他方法新增到事件委託中

dealer.newcarinfo += valtteri.newcarishere;

dealer.newcarinfo += max.newcarishere;

三、在合適的時候觸發事件,事件委託會執行新增到事件委託的其他方法

訂閱者給出乙個聯絡我的方法,然後註冊到事件委託中,觸發事件後事件委託呼叫訂閱者給出的聯絡方法

寫得不好的地方,請批評指正

[email protected]

注:本文中**示例來自《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 在建構函式中新增事件觸發時,...