C#的事件機制是基於委托實現的。實現一個事件,要先定義一個委托類型
class1
{
public delegate void mydelegate (myEventArgs e);
public event mydelegate event1;
}
然後我們可以使用+=和-=注冊、移除事件
class1.event1 += new mydelegate(new myEventArgs());
在class中引發事件時最好這樣
class1
{
public fireEvent()
{
if(event1 != null)
event1();
}
}
如果不想聲明自己的委托類型的話,可以使用System.EventHandler的委托類型
public delegate void EventHandler(object sender, EventArgs e);
其中EventArgs轉送附加參數。
可以實現自己的EventArgs類
class myEventArgs:EventArgs
{
}
類名最好以EventArgs 結尾,這是個默認規則
調用時如果不想使用參數可以傳遞
EventArgs.Empty
事件其實背後做了很多工作,自動生成一個委托實例、一個注冊委托的add_XXX方法、一個注銷委托的
Remove_XXX方法。事實上這兩個方法可以自己定制。只要聲明事件時使用以下語法:
public event MyDelegate1 Event1
{
add
{
}
remove
{
}
}
在其中實現自己的注冊函數即可。看上去是不是很像屬性的定義:)