日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > C# >内容正文

C#

大白话系列之C#委托与事件讲解(二)

發(fā)布時(shí)間:2025/3/21 C# 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 大白话系列之C#委托与事件讲解(二) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

什么是事件?EVENT?點(diǎn)擊事件?加載事件?一連串的模糊的概念沖擊著我們?nèi)跣〉哪X袋

那我們首先來(lái)看一下比較正統(tǒng)的感念吧:

事件是類(lèi)在發(fā)生其關(guān)注的事情時(shí)用來(lái)提供通知的一種方式。

事件的發(fā)生一般都牽扯2個(gè)角色

事件發(fā)行者(Publisher):一個(gè)事件的發(fā)行者,也稱作是發(fā)送者(sender),其實(shí)就是個(gè)對(duì)象,這個(gè)對(duì)象會(huì)自行維護(hù)本身的狀態(tài)信息,當(dāng)本身狀態(tài)信息變動(dòng)時(shí),便觸發(fā)一個(gè)事件,并通知說(shuō)有的事件訂閱者。

事件訂閱者(Subscriber):對(duì)事件感興趣的對(duì)象,也稱為Receiver,可以注冊(cè)感興趣的事件,在事件發(fā)行者觸發(fā)一個(gè)事件后,會(huì)自動(dòng)執(zhí)行這段代碼。

為了更好的讓大家理解上面的概念,我先什么都不講,我們先來(lái)看一段簡(jiǎn)單的代碼:

代碼

????//發(fā)布者(Publiser)
????public?class?Publisher
????{
????????//聲明一個(gè)出版的委托
????????public?delegate?void?PublishEventHander();
????????//在委托的機(jī)制下我們建立以個(gè)出版事件
????????public?event?PublishEventHander?OnPublish;
????????//事件必須要在方法里去觸發(fā),出版社發(fā)布新書(shū)方法
????????public?void?issue()
????????{
????????????//如果有人注冊(cè)了這個(gè)事件,也就是這個(gè)事件不是空
????????????if?(OnPublish?!=?null)
????????????{
????????????????Console.WriteLine("最新一期的《火影忍者》今天出版哦!");
????????????????OnPublish();
????????????}
????????}
????}

????//Subscriber?訂閱者,無(wú)賴小明
????public?class?MrMing
????{
????????//對(duì)事件感興趣的事情,這里指對(duì)出版社的書(shū)感興趣
????????public?static?void?Receive()
????????{
????????????Console.WriteLine("嘎嘎,我已經(jīng)收到最新一期的《火影忍者》啦!!");???????
????????}
????}
????

????//Subscriber?訂閱者,悲情人物小張
????public?class?MrZhang
????{
????????//對(duì)事件感興趣的事情
????????public?static?void?Receive()
????????{
????????????Console.WriteLine("幼稚,這么大了,還看《火影忍者》,SB小明!");
????????}
????}

????class?Story
????{
????????public?static?void?Main(string[]?args)
????????{
????????????//實(shí)例化一個(gè)出版社
????????????Publisher?publisher?=?new?Publisher();

????????????//給這個(gè)出火影忍者的事件注冊(cè)感興趣的訂閱者,此例中是小明
????????????publisher.OnPublish?+=?new?Publisher.PublishEventHander(MrMing.Receive);
????????????//另一種事件注冊(cè)方式
????????????//publisher.OnPublish?+=?MrMing.Receive;

????????????//發(fā)布者在這里觸發(fā)出版火影忍者的事件
????????????publisher.issue();

????????????Console.ReadKey();
????????}
????}

?

編譯結(jié)果如下

?

?

如果童靴們,從上到下仔細(xì)看一邊的話,我想應(yīng)該知道什么是發(fā)布者,什么是訂閱者了吧,那至于事件呢

我們先看這句

publisher.OnPublish?+=?new?Publisher.PublishEventHander(MrMing.Receive);

這就是小明向出版社訂閱他喜歡看的火影忍者,小張沒(méi)有訂閱所以小張沒(méi)有收到書(shū),

?

我們?cè)僮屑?xì)看看這個(gè)賦值語(yǔ)句,是不是似曾相識(shí)過(guò)呢?是的就是我們?cè)谏弦恢v,在講委托聲明的時(shí)候,簡(jiǎn)直就是一個(gè)眸子里刻出來(lái)的嘛

委托賦值:

BugTicketEventHandler?myDelegate?=?new?BugTicketEventHandler(MrZhang.BuyTicket);

所以,大家不要對(duì)事件有什么好怕的,其實(shí)事件的本質(zhì)就是一個(gè)委托鏈,

我們看一下事件的聲明:

??????? //聲明一個(gè)出版的委托
????????public?delegate?void?PublishEventHander();
????????//在委托的機(jī)制下我們建立以個(gè)出版事件
????????public?event?PublishEventHander?OnPublish;
在我們使用事件的時(shí)候,必須要聲明對(duì)應(yīng)的委托,而觸發(fā)事件,其實(shí)就是在使用委托鏈。

好了大家先消化消化這講的內(nèi)容,我們?cè)谙乱恢v里,我們會(huì)講到我們期盼已久的Sender,e兩個(gè)神秘的參數(shù)了

?

from:?https://www.cnblogs.com/wudiwushen/archive/2010/04/20/1703763.html

總結(jié)

以上是生活随笔為你收集整理的大白话系列之C#委托与事件讲解(二)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。