C# 事件的含義
事件類似于異常,因?yàn)樗鼈兌加蓪?duì)象引發(fā)(拋出),并且都可以通過(guò)我們提供的代碼來(lái)處理。但它們也有幾個(gè)重要區(qū)別。最重要的區(qū)別是并沒(méi)有與try...catch類似的結(jié)構(gòu)來(lái)處理事件,你必須訂閱(subscribe)它們。訂閱一個(gè)事件的含義是提供代碼,在事件發(fā)生時(shí)執(zhí)行這些代碼,它們稱為事件處理程序。
單個(gè)事件可供多個(gè)處理程序訂閱,在該事件發(fā)生時(shí),這些處理程序都會(huì)被調(diào)用,其中包括引發(fā)該事件的對(duì)象所在的類中的事件處理程序,但事件處理程序也可能在其他類中。
事件處理程序本身都是簡(jiǎn)單方法。對(duì)事件處理方法的唯一限制是它必須匹配事件所要求的返回類型和參數(shù)。這個(gè)限制是事件定義的一部分,由一個(gè)委托指定。
基本處理過(guò)程_如下所示:首先,應(yīng)用程序創(chuàng)建一個(gè)可以引發(fā)事件的對(duì)象。例如,假定一個(gè)即時(shí)消息傳送(instant messaging)應(yīng)用程序創(chuàng)建的對(duì)象表示一個(gè)遠(yuǎn)程用戶的連接。當(dāng)接收到遠(yuǎn)程用戶通過(guò)該連接傳送來(lái)的消息時(shí),這個(gè)連接對(duì)象會(huì)引發(fā)一個(gè)事件,如圖所示。
接著,應(yīng)用程序訂閱事件。為此,即時(shí)消息傳送應(yīng)用程序?qū)⒍x一個(gè)方法,該方法可以與事件指定的委托類型一起使用,把這個(gè)方法的一個(gè)引用傳送給事件,而事件的處理方法可以是另一個(gè)對(duì)象的方法,例如當(dāng)接收到消息時(shí)進(jìn)行顯示的顯示設(shè)備對(duì)象,如圖所示。
引發(fā)事件后,就通知訂閱器.當(dāng)接收到通過(guò)連接對(duì)象傳來(lái)的即時(shí)消息時(shí),就調(diào)用顯示設(shè)備對(duì)象上的事件處理方法。因?yàn)槲覀兪褂玫氖且粋€(gè)標(biāo)準(zhǔn)方法,所以引發(fā)事件的對(duì)象可以通過(guò)參數(shù)傳送任何相關(guān)的信息,這樣就大大増加了事件的通用性在本例中,一個(gè)參數(shù)是即時(shí)消息的文本,事件處理程序可在顯示設(shè)備對(duì)象上顯示它。
點(diǎn)擊加載更多評(píng)論>>