要爲類構造一個事件,必須用 event 來聲明一個 delegate 型的字段,如:
puclic calss test{
public delegate eventhandler(object sender, eventargs e); //聲明爲delegate 型的事件;
}
而後要指定一個事件的名稱,並寫出處理語句:
public event eventhandler load
在建立類的實例後定義這個 「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); // 關聯事件句柄;
myeventclass.customevent += new eventclass.customeventhandler(customevent2);
myeventclass.invokeevent();
myeventclass.customevent -= new eventclass.customeventhandler(customevent2);
myeventclass.invokeevent();
myeventclass.load += new eventclass.customeventhandler(load1);
myeventclass.onload();
}
** static void customevent1(object sender, eventargs e)
{
console.writeline("fire event 1");
}
** static void customevent2(object sender, eventargs e)
{
console.writeline("fire event 2");
}
** 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);//首先定義一個委託類型的對象customeventhandler
//用delegate數據類型聲明事件,要用event關鍵字,這裏定義了兩個字件;
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();
}
}
}
在包含事件聲明的類中,聲明一個數據類型是委託的這麼樣的一個對象customeventhandler, 它有兩個參數(sender和e);在這裏使用委託的目的就是在運行中向參數傳遞方法,並由委託對象生成的實例接收這個參數方法的返回值,所以,在聲明委託型的對象時應根據類中的方法結構來定義,或者說在引用類中應當根據委託型對象的結構來生成響應事件的方法結構,好比二者都有哪些類型的參數、返回值的類型,也就是說二者要保持一致。同時,要正確地使用c#中的委託,就必須保持三個步驟:聲明——實例化——調用。
在上面的代碼中,eventclass 類就體現了這個原則:
1. 聲明委託類型的對象: public delegate void customeventhandler(object sender, eventargs e);
2. 建立customeventhandler對象的實例customevent:public event customeventhandler customevent;
3. 在invokeevent()方法中實現了對該事件的調用,引用事件。c#