在C#中創(chuàng)建和使用事件的步驟
1. 為事件創(chuàng)建一個(gè)委托類(lèi)型
所有事件是通過(guò)委托來(lái)激活的,其返回值類(lèi)型一般為void型。為事件創(chuàng)建一個(gè)委托類(lèi)型的語(yǔ)法格式如下:
delegate void 委托類(lèi)型名([觸發(fā)事件的對(duì)象名,事件參數(shù)]);
例如,以下語(yǔ)句創(chuàng)建一個(gè)委托類(lèi)型mydelegate,其委托的事件處理方法返回類(lèi)型為void,不帶任何參數(shù):
public delegate void mydelegate();
2. 創(chuàng)建事件處理的方法
當(dāng)事件觸發(fā)時(shí)要調(diào)用事件處理方法,需設(shè)計(jì)相應(yīng)的事件處理方法,可以將它放在單獨(dú)的類(lèi)中,也可以放在觸發(fā)事件的類(lèi)中。
例如,以下設(shè)計(jì)一個(gè)包含事件處理方法的單獨(dú)類(lèi)
class MyEventHander
{ public void OnHandler1()
{
Console.WriteLine("調(diào)用OnHandler1方法");
}
}
3. 聲明事件
事件是類(lèi)成員,以關(guān)鍵字event聲明,其一般語(yǔ)法格式如下:
[修飾符] event 委托類(lèi)型名 事件名;
其中,“修飾符”指出類(lèi)的用戶(hù)訪問(wèn)事件的方式,可以為public 、private、protected、internal、protectedinternal、static或virtual等。
一般在聲明事件的類(lèi)中包含觸發(fā)事件的方法。例如,以下MyEvent類(lèi)包含事件聲明和觸發(fā)該事件的方法:
MyEvent //事件類(lèi)
{ public event mydelegate1 Event1; //聲明事件
public void FireEvent1() //調(diào)用這個(gè)方法來(lái)觸發(fā)事件Event1
{ if(Event1 != null)
{
Event1(); //Event1事件發(fā)生
}
}
}
4. 通過(guò)委托對(duì)象來(lái)調(diào)用被包含的方法
向類(lèi)事件(列表)中添加事件處理方法中的一個(gè)委托,這個(gè)過(guò)程稱(chēng)為訂閱事件,這個(gè)過(guò)程通常是在主程序中進(jìn)行的,首先必須聲明一個(gè)包含事件的類(lèi)的對(duì)象,然后將事件處理方法和該對(duì)象關(guān)聯(lián)起來(lái),其格式如下:
事件類(lèi)對(duì)象名.事件名+=new 委托類(lèi)型名(事件處理方法);
其中,還可以使用“-=”、“+”、“-”等運(yùn)算符添加或刪除事件處理方法。最后調(diào)用觸發(fā)事件的方法便可觸發(fā)事件。
例如,以下語(yǔ)句就是觸發(fā)前面創(chuàng)建的事件Event1,并在屏幕上顯示“調(diào)用OnHandler1方法”:
MyEvent b = new MyEvent();
MyEventHander a = new MyEventHander();
b.Event1 += new mydelegate1(a.OnHandler1);
//把方法OnHandler1添加到事件列表中
b.FireEvent1(); //調(diào)用觸發(fā)事件的方法
點(diǎn)擊加載更多評(píng)論>>