使用C 的自定義事件

2022-09-16 02:12:09 字數 2199 閱讀 8140

public

class

cardealer

has come.

", car);

if (newcarinfo != null

) newcarinfo(car);

}}

先插入一段**,這個例子的 action表示只有乙個 string 引數,如果有一組的引數的話,**寫起來會比較難看。

.net 給我們提供了基於 eventargs 來進行傳參 的 自定義事件 eventhandler。

public

delegate

void eventhandler(object sender, teventargs e);

可以eventhandler 理解為「發布者提供的訂閱器」"sender" 表示發布者「e」 表示發布者推送給訂閱者的引數資訊

eventargs 則是 發布者 與 訂閱者 間約定好的訂閱資訊

來看完整的例子:

class

program

public myeventarg(string

carname)

}public

class

cardealer

has come.

", carname);

if (newcarinfo != null

) newcarinfo(

this, new

myeventarg(carname));}}

public

class

consumer

public

void newcarishere(object

sender, myeventarg e)

, car is new

", name, e.name);}}

static

void main(string

args)

}

個人不喜用「發布-訂閱」模式來闡述,更偏向於用「通知-反饋」模式的流程 可加以總結了:

1. 定義一種事件或委託,同時約定好通知者要給反饋者的引數;

public

class

myeventarg : eventargs

public myeventarg(string

carname)

}public

class

cardealer

has come.

", carname);

if (newcarinfo != null

) newcarinfo(

this, new

myeventarg(carname));

}}

2. 發布者提供事件通道 接受 反饋者按約定生成的反饋行為;

public

class

consumer

public

void newcarishere(object

sender, myeventarg e)

, car is new

", name, e.name);

}}

var dealer = new

cardealer();

var persona = new consumer("

persona");

dealer.newcarinfo +=persona.newcarishere;

var personb = new consumer("

personb");

dealer.newcarinfo += personb.newcarishere;

3. 通知者發出通知,反饋者收到通知並做出反饋行為;

dealer.newcarcoming("

ferrari");

dealer.newcarcoming(

"bmw

");

C 事件 自定義事件

事件有很多,比如說 滑鼠的事件 mousermove,mouserdown等。鍵盤的事件 keyup,keydown,keypress。有事件,就會有對事件進行處理的方法,而事件和處理方法之間是怎麼聯絡起來的呢?委託就是他們中間的橋梁,事件發生時,委託會知道,然後將事件傳遞給處理方法,處理方法進行相...

c 自定義事件

此 摘自 叩響c 之門 c sharp view plain copy using system 事件傳送者 class dog 事件接收者 class host 註冊事件處理程式 public host dog dog 現在來觸發事件 class program 午夜零點小偷到達,看門狗引發ala...

C 自定義事件

本身今天晚上是要寫一篇關於自定義事件的部落格,然後自己再擼會 可是計畫不如變化,今天聽到同事談到陳冠希拍紀錄片,所以就去優酷上看了一下,連著看完了,要知道我這人有點強迫症,要搞一件事情一定要搞完的,所以現在已經快11點了,記錄完這個就去睡覺了。關於c 自定義事件,通俗的講,它就是乙個特殊的委託。可以...