■事件:事件是一種函數回調機制,它通過委托來實現函數回調。
使用事件之前,首先在需要上報的類中聲明一個事件,通常包含兩個步驟:
(1)定義一個委托類型(EventHandler)表示時間處理函數的類型
(2)在類中用關鍵字event聲明一個EventHandler類型的事件,事件同樣具有訪問性,通常為public
delegate void MyEventHandler(Object sender,EventArgs e)
class EventClass{
public event MyEventHandler MyEvent;
}
■注冊和注銷事件
一個類的使用者需要處理類的事件,通常需要3個步驟:
(1)為要處理的事件增加處理函數
(2)將事件處理函數通過+=運算符注冊到要處理的事件
(3)處理完成后,通過-=運算符注銷不需要的事件處理函數
■
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace EventDelegate
{
delegate void MyEventHandler(Object sender,EventArgs e);
class EventClass {
public event MyEventHandler MyEvent;
protected void OnMyEvent(EventArgs e) {
System.Console.WriteLine("EventClass:Ready to fire a MyEvent");
if (this.MyEvent != null) {
System.Console.WriteLine("EventClass:fire a MyEvent");
this.MyEvent(this, e);
}
}
public void FireEvent() {
this.OnMyEvent(EventArgs.Empty);
}
}
class Program
{
static void GetAEvent(object sender, EventArgs e) {
System.Console.WriteLine("GetAEvent:Get a Event EventClass.MyEvent");
}
static void Main(string[] args)
{
EventClass eventClass = new EventClass();
eventClass.MyEvent += new MyEventHandler(GetAEvent);
eventClass.FireEvent();
eventClass.MyEvent -= new MyEventHandler(GetAEvent);
eventClass.FireEvent();
System.Console.ReadLine();
}
}
}
運行結果:
EventClass:Ready to fire a MyEvent
EventClass:fire a MyEvent
GetAEvent:Get a Event EventClass.MyEvent
EventClass:Ready to fire a MyEvent
posted on 2009-10-26 16:31
期待明天 閱讀(505)
評論(0) 編輯 收藏 所屬分類:
CSharp