大白话系列之C#委托与事件讲解(二)
什么是事件?EVENT?點擊事件?加載事件?一連串的模糊的概念沖擊著我們弱小的腦袋
那我們首先來看一下比較正統的感念吧:
事件是類在發生其關注的事情時用來提供通知的一種方式。
事件的發生一般都牽扯2個角色
事件發行者(Publisher):一個事件的發行者,也稱作是發送者(sender),其實就是個對象,這個對象會自行維護本身的狀態信息,當本身狀態信息變動時,便觸發一個事件,并通知說有的事件訂閱者。
事件訂閱者(Subscriber):對事件感興趣的對象,也稱為Receiver,可以注冊感興趣的事件,在事件發行者觸發一個事件后,會自動執行這段代碼。
為了更好的讓大家理解上面的概念,我先什么都不講,我們先來看一段簡單的代碼:
代碼
????//發布者(Publiser)
????public?class?Publisher
????{
????????//聲明一個出版的委托
????????public?delegate?void?PublishEventHander();
????????//在委托的機制下我們建立以個出版事件
????????public?event?PublishEventHander?OnPublish;
????????//事件必須要在方法里去觸發,出版社發布新書方法
????????public?void?issue()
????????{
????????????//如果有人注冊了這個事件,也就是這個事件不是空
????????????if?(OnPublish?!=?null)
????????????{
????????????????Console.WriteLine("最新一期的《火影忍者》今天出版哦!");
????????????????OnPublish();
????????????}
????????}
????}
????//Subscriber?訂閱者,無賴小明
????public?class?MrMing
????{
????????//對事件感興趣的事情,這里指對出版社的書感興趣
????????public?static?void?Receive()
????????{
????????????Console.WriteLine("嘎嘎,我已經收到最新一期的《火影忍者》啦!!");???????
????????}
????}
????
????//Subscriber?訂閱者,悲情人物小張
????public?class?MrZhang
????{
????????//對事件感興趣的事情
????????public?static?void?Receive()
????????{
????????????Console.WriteLine("幼稚,這么大了,還看《火影忍者》,SB小明!");
????????}
????}
????class?Story
????{
????????public?static?void?Main(string[]?args)
????????{
????????????//實例化一個出版社
????????????Publisher?publisher?=?new?Publisher();
????????????//給這個出火影忍者的事件注冊感興趣的訂閱者,此例中是小明
????????????publisher.OnPublish?+=?new?Publisher.PublishEventHander(MrMing.Receive);
????????????//另一種事件注冊方式
????????????//publisher.OnPublish?+=?MrMing.Receive;
????????????//發布者在這里觸發出版火影忍者的事件
????????????publisher.issue();
????????????Console.ReadKey();
????????}
????}
?
編譯結果如下
?
?
如果童靴們,從上到下仔細看一邊的話,我想應該知道什么是發布者,什么是訂閱者了吧,那至于事件呢
我們先看這句
publisher.OnPublish?+=?new?Publisher.PublishEventHander(MrMing.Receive);
這就是小明向出版社訂閱他喜歡看的火影忍者,小張沒有訂閱所以小張沒有收到書,
?
我們再仔細看看這個賦值語句,是不是似曾相識過呢?是的就是我們在上一講,在講委托聲明的時候,簡直就是一個眸子里刻出來的嘛
委托賦值:
BugTicketEventHandler?myDelegate?=?new?BugTicketEventHandler(MrZhang.BuyTicket);
所以,大家不要對事件有什么好怕的,其實事件的本質就是一個委托鏈,
我們看一下事件的聲明:
??????? //聲明一個出版的委托
????????public?delegate?void?PublishEventHander();
????????//在委托的機制下我們建立以個出版事件
????????public?event?PublishEventHander?OnPublish;
在我們使用事件的時候,必須要聲明對應的委托,而觸發事件,其實就是在使用委托鏈。
好了大家先消化消化這講的內容,我們在下一講里,我們會講到我們期盼已久的Sender,e兩個神秘的參數了
?
from:?https://www.cnblogs.com/wudiwushen/archive/2010/04/20/1703763.html
總結
以上是生活随笔為你收集整理的大白话系列之C#委托与事件讲解(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linq 多表连接查询join
- 下一篇: 大白话系列之C#委托与事件讲解(三)