■事件:事件是一种函数回调机制,它通过委托来实现函数回调。
使用事件之前,首先在需要上报的类中声明一个事件,通常包含两个步骤:
(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
期待明天 阅读(486)
评论(0) 编辑 收藏 所属分类:
CSharp