publicclass
cardealer
has come.
", car);
if (newcarinfo != null
) newcarinfo(car);
}}
先插入一段**,這個例子的 action表示只有乙個 string 引數,如果有一組的引數的話,**寫起來會比較難看。
.net 給我們提供了基於 eventargs 來進行傳參 的 自定義事件 eventhandler。
publicdelegate
void eventhandler(object sender, teventargs e);
可以eventhandler 理解為「發布者提供的訂閱器」,"sender" 表示發布者,「e」 表示發布者推送給訂閱者的引數資訊。
而eventargs 則是 發布者 與 訂閱者 間約定好的訂閱資訊。
來看完整的例子:
classprogram
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. 定義一種事件或委託,同時約定好通知者要給反饋者的引數;
publicclass
myeventarg : eventargs
public myeventarg(string
carname)
}public
class
cardealer
has come.
", carname);
if (newcarinfo != null
) newcarinfo(
this, new
myeventarg(carname));
}}
2. 發布者提供事件通道 接受 反饋者按約定生成的反饋行為;
publicclass
consumer
public
void newcarishere(object
sender, myeventarg e)
, car is new
", name, e.name);
}}
var dealer = newcardealer();
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 自定義事件,通俗的講,它就是乙個特殊的委託。可以...