1.聲明事件
EventHandler是一個(gè)預(yù)定義的委托,它定義了一個(gè)無返回值的方法。在 .Net Fromwork中,他的格式:
public delegate voidEventHandler (Object sender, EvenArgs e)
其中sender的類型為Object,表示時(shí)間發(fā)布者本身,e用來傳遞事件的相關(guān)信息,數(shù)據(jù)類型為EvenArgs及其派生類。
標(biāo)準(zhǔn)的EvenArgs并不包含任何事件數(shù)據(jù), 因此EventHandler專用于表示不生成數(shù)據(jù)的事件的事件方法。如果要事件生成數(shù)據(jù),則必須提供自定義的事件類型,該類型從EventArgs派生,提供保存時(shí)間數(shù)據(jù)所需要的全部字段或?qū)傩裕@樣時(shí)間發(fā)布者可以將特定的數(shù)據(jù)發(fā)送給接收者。
用標(biāo)準(zhǔn)的EventHandler委托可以聲明不包含數(shù)據(jù)的標(biāo)準(zhǔn)事件:
public event EvenHandler 事件名;
要生成包含數(shù)據(jù)的事件,必須先自定義事件數(shù)據(jù)類型,有兩種:
(1)先定義委托,再定義事件。
public class 事件數(shù)據(jù)類型 : EventArgs {//封裝信息;}
public delegate 返回值類型 委托類型名 (Object sender, 事件數(shù)據(jù)類型 e);
public event 委托類型 事件名;
(2)使用泛型EventHandler定義事件。
public class 時(shí)間數(shù)據(jù)類型 : EventArgs {//封裝信息;}
public event EventHandler<時(shí)間數(shù)據(jù)類型>事件名;
2.訂閱事件
聲明事件的實(shí)質(zhì)是定義一個(gè)數(shù)據(jù)變量,并不意味著就能成功觸發(fā)事件,還要:(1)在事件的接收者中定義一個(gè)方法來響應(yīng)時(shí)間,(2)通過創(chuàng)建委托對象把事件與事件方法聯(lián)系起來(又稱綁定事件或訂閱事件)。負(fù)責(zé)綁定事件與事件方法的類就稱為時(shí)間的訂閱者。
事件名+= new 事件委托名(事件方法);
注意:
(1)訂閱事件的操作由事件的接收者實(shí)現(xiàn)。
(2)每個(gè)事件都可以有多個(gè)處理程序,多個(gè)程序按順序調(diào)用。如果一個(gè)處理程序發(fā)生異常,還未處理的程序則沒有機(jī)會(huì)接受事件。為此,建議事件處理程序迅速處理事件,并避免發(fā)生異常。
(3)訂閱事件必須見一個(gè)與事件具有相同類型的委托對象,把事件方法當(dāng)作委托目標(biāo),使用“+=”運(yùn)算符把事件方法添加到源對象的事件中。
(4)若要取消訂閱事件,可使用“-=”。
3.觸發(fā)事件
在C#中,觸發(fā)事件與委托點(diǎn)用相同,但要注意使用匹配的事件參數(shù)。事件一旦觸發(fā),相應(yīng)的事件方法就會(huì)被調(diào)用,如果該事件沒有任何處理程序,則該事件為空。
4.總結(jié):
第一步:定義相關(guān)信息類;
第二步:定義事件警報(bào)器;
第三步:聲明事件產(chǎn)生時(shí)調(diào)用的方法;
第四步:訂閱事件;
第五步:觸發(fā)事件;
5.采用基于事件驅(qū)動(dòng)模型進(jìn)行程序設(shè)計(jì),其實(shí)過程包括五部分:
(1)定義事件相關(guān)信息類;
(2)在事件發(fā)布者類(事件源)中聲明事件,并聲明一個(gè)負(fù)責(zé)觸發(fā)事件的方法;
(3)在事件接受者類中聲明事件產(chǎn)生時(shí)調(diào)用的方法;
(4)在事件接受者類中訂閱事件;
(5)在事件接收者類中觸發(fā)事件。
初學(xué)筆記還望大家多多指點(diǎn)!!!
新聞熱點(diǎn)
疑難解答
圖片精選