要為類構(gòu)造一個(gè)事件,必須用 event 來(lái)聲明一個(gè) delegate 型的字段,如:
puclic calss Test{
public delegate EventHandler(object sender, EventArgs e); //聲明為delegate 型的事件;
}
然后要指定一個(gè)事件的名稱,并寫出處理語(yǔ)句:
public event EventHandler Load
在創(chuàng)建類的實(shí)例后定義這個(gè) “Load”事件:
Test m=new Test();
m.load=new EventHandler(m_Load);
void m_Load(object sender, EventArgs e)
{
MessageBox.Show(" this is a class event");
}
再看看下面的完整的一段代碼:
using System;
class TestClass
{
static void Main(string[] args)
{
EventClass myEventClass = new EventClass();
myEventClass.CustomEvent += new EventClass.CustomEventHandler(CustomEvent1); // 關(guān)聯(lián)事件句柄;
myEventClass.CustomEvent += new EventClass.CustomEventHandler(CustomEvent2);
myEventClass.InvokeEvent();
myEventClass.CustomEvent -= new EventClass.CustomEventHandler(CustomEvent2);
myEventClass.InvokeEvent();
myEventClass.Load += new EventClass.CustomEventHandler(Load1);
myEventClass.onLoad();
}
PRivate static void CustomEvent1(object sender, EventArgs e)
{
Console.WriteLine("Fire Event 1");
}
private static void CustomEvent2(object sender, EventArgs e)
{
Console.WriteLine("Fire Event 2");
}
private static void Load1(object sender, EventArgs e)
{
Console.WriteLine("Current background color is {0}. Please input:", System.Console.BackgroundColor.ToString());
}
}
public class EventClass
{
public delegate void CustomEventHandler(object sender, EventArgs e);//首先定義一個(gè)委托類型的對(duì)象CustomEventHandler
//用delegate數(shù)據(jù)類型聲明事件,要用event關(guān)鍵字,這里定義了兩個(gè)字件;
public event CustomEventHandler CustomEvent;
public event CustomEventHandler Load;
public void InvokeEvent()
{
CustomEvent(this, EventArgs.Empty);
}
public void onLoad()
{
Console.BackgroundColor = ConsoleColor.Red;
Load(this, EventArgs.Empty);
string s = Console.ReadLine();
if (s != "yuping")
{
Console.WriteLine("You must type 'yuping' for change it !");
}
else
{
Console.BackgroundColor = System.ConsoleColor.Black;
Console.Clear();
}
}
}
在包含事件聲明的類中,聲明一個(gè)數(shù)據(jù)類型是委托的這么樣的一個(gè)對(duì)象CustomEventHandler, 它有兩個(gè)參數(shù)(sender和e);在這里使用委托的目的就是在運(yùn)行中向參數(shù)傳遞方法,并由委托對(duì)象生成的實(shí)例接收這個(gè)參數(shù)方法的返回值,因此,在聲明委托型的對(duì)象時(shí)應(yīng)根據(jù)類中的方法結(jié)構(gòu)來(lái)定義,或者說(shuō)在引用類中應(yīng)當(dāng)根據(jù)委托型對(duì)象的結(jié)構(gòu)來(lái)生成響應(yīng)事件的方法結(jié)構(gòu),比如兩者都有哪些類型的參數(shù)、返回值的類型,也就是說(shuō)兩者要保持一致。同時(shí),要正確地使用C#中的委托,就必須保持三個(gè)步驟:聲明——實(shí)例化——調(diào)用。
在上面的代碼中,EventClass 類就體現(xiàn)了這個(gè)原則:
1. 聲明委托類型的對(duì)象: public delegate void CustomEventHandler(object sender, EventArgs e);
2. 創(chuàng)建CustomEventHandler對(duì)象的實(shí)例CustomEvent:public event CustomEventHandler CustomEvent;
3. 在InvokeEvent()方法中實(shí)現(xiàn)了對(duì)該事件的調(diào)用,引用事件。
http://skylaugh.VEVb.com/archive/2006/07/11/448098.html
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注