您的位置:首页 > 编程语言 > C#

C# event 的一个例子

2009-04-03 01:51 281 查看
using System;
class EventClass
{
//step1:create custom event args class(skip if system:EventArgs is used)
#region custom event args class
public class EventNameEventArgs:EventArgs
{
public string SenderID;
public string EventID;
public EventNameEventArgs(string SenderID,string EventID)
{
this.SenderID = SenderID;
this.EventID = EventID;
}
}
#endregion custom event args class
//step2:declare custom event delegate(skip if system:EventHandler is used)
#region custom event delegate
public delegate void EventNameEventHandler(object sender, EventNameEventArgs e);
#endregion custom event delegate
//step3: create event declaration(EventName) and a method(OnEventName) that raises the event
public event EventNameEventHandler EventName; //event delegate member
protected virtual void OnEventName(EventNameEventArgs e) //method to invoke the event delegate member
{
if (EventName != null) //if event delegate member is hooked with some function
{
EventName(this, e);//invoking the event delegate member and passing the event args
}
}
}//class EventClass

//event-raising class, derived from EventName Class, to call protected "OnEventName" method in due time
//("WHEN TO RAISE")
#region event-raising class
class EventRaisingClass:EventClass
{
protected string EventRaiserClassID;
public EventRaisingClass(string EventRaiserClassID)
{
this.EventRaiserClassID = EventRaiserClassID;
}
//method to raise the event while passing certain event args
public void RaiseEvent(string EventID)
{
EventNameEventArgs e = new EventNameEventArgs(this.EventRaiserClassID,EventID); //encapsulate the event parameters in the custom args
OnEventName(e); //raise the event
}
}
#endregion event-raising class

//EventRecieverClass with EventProcess method
#region event-reciever class
class EventRecieverClass
{
public EventRecieverClass(EventRaisingClass EventRaiser)
{
RegisterEvent(EventRaiser);
}
public void RegisterEvent(EventRaisingClass EventRaiser)
{
EventRaiser.EventName += new EventClass.EventNameEventHandler(EventProcess); //hook EventRaiser with EventReciever
}
void EventProcess(object sender, EventClass.EventNameEventArgs e)
{
Console.WriteLine("Event {0} is raised by Sender {1} ! ",e.EventID,e.SenderID); //事件响应函数
}
public void UnregisterEvent(EventRaisingClass EventRaiser)
{
EventRaiser.EventName -= new EventClass.EventNameEventHandler(EventProcess);
}
}
#endregion event-reciever class
#region Application class
class App
{
public static void Main()
{
//instantiate event-raising class
EventRaisingClass EventSender1 = new EventRaisingClass("发送者1");
EventRaisingClass EventSender2 = new EventRaisingClass("发送者2");
//instantiate event-reciever class
EventRecieverClass EventReviever1 = new EventRecieverClass(EventSender1); //hooked with EventSender1 when instantiating
EventSender1.RaiseEvent("事件1");
EventSender1.RaiseEvent("事件2");
EventSender2.RaiseEvent("事件3");
EventReviever1.RegisterEvent(EventSender2);
EventSender2.RaiseEvent("事件4");
EventSender1.RaiseEvent("事件5");
EventReviever1.UnregisterEvent(EventSender1);
EventSender1.RaiseEvent("事件6");
EventSender2.RaiseEvent("事件7");
EventSender2.RaiseEvent("事件8");
EventReviever1.UnregisterEvent(EventSender2);
EventSender1.RaiseEvent("事件9");
EventSender2.RaiseEvent("事件10");
Console.ReadKey();
}
}
#endregion Application class
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: