什么是事件?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ā)行者,,也稱(chēng)作是發(fā)送者(sender),其實(shí)就是個(gè)對(duì)象,,這個(gè)對(duì)象會(huì)自行維護(hù)本身的狀態(tài)信息,,當(dāng)本身狀態(tài)信息變動(dòng)時(shí),便觸發(fā)一個(gè)事件,,并通知說(shuō)有的事件訂閱者,。 事件訂閱者(Subscriber):對(duì)事件感興趣的對(duì)象,也稱(chēng)為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 On public void issue() { //如果有人注冊(cè)了這個(gè)事件,,也就是這個(gè)事件不是空 if (On { Console.WriteLine("最新一期的《火影忍者》今天出版哦!"); On } } //Subscriber 訂閱者,,無(wú)賴(lài)小明 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.On //另一種事件注冊(cè)方式 //publisher.On publisher.issue(); Console.ReadKey(); } } 編譯結(jié)果如下
如果童靴們,,從上到下仔細(xì)看一邊的話(huà),我想應(yīng)該知道什么是發(fā)布者,,什么是訂閱者了吧,,那至于事件呢 我們先看這句 publisher.On 這就是小明向出版社訂閱他喜歡看的火影忍者,小張沒(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è)出版的委托 好了大家先消化消化這講的內(nèi)容,,我們?cè)谙乱恢v里,,我們會(huì)講到我們期盼已久的Sender,e兩個(gè)神秘的參數(shù)了 |
|
來(lái)自: 冷刃寒冰 > 《我的圖書(shū)館》