今天在看《.net 框架程序设计》的事件原理,抄了个例子:
发布事件:
using System;
class MailManager
{
//在mailmanager内部定义MailMsgEventArgs类型
public class MailMsgEventArgs:EventArgs
{
public readonly String from,to,subject,body;
//1.传递给事件接收者的类型定义信息
public MailMsgEventArgs(String from,String to,String subject,String body)
{
this.from=from;
this.to=to;
this.subject=subject;
this.body=body;
}
![](/Images/OutliningIndicators/InBlock.gif)
}
![](/Images/OutliningIndicators/InBlock.gif)
//2.下面的委托类型定义了接收者必须实现的回调方法原型
public delegate void MailMsgEventHandler(Object sender,MailMsgEventArgs args);
//3.事件成员
public event MailMsgEventHandler MailMsg;
![](/Images/OutliningIndicators/InBlock.gif)
//4.下面的受保护虚方法负责通知事件的登记对象
protected virtual void OnMailMsg(MailMsgEventArgs e)
{
if(MailMsg != null)
{
MailMsg(this,e);
}
}
![](/Images/OutliningIndicators/InBlock.gif)
//5.下面的方法将输入转化为期望的事件,该方法在新的信息到达时被调用
public void SimulateArrivingMsg(String from,String to,String subject,String body)
{
//构造一个对象保存希望传递给通知接收者的信息
MailMsgEventArgs e=new MailMsgEventArgs(from,to,subject,body);
//调用虚方法通知对象时间已经发生
//如果派生类型没有重写该虚方法,对象将通知所有的登记的事件侦听者
OnMailMsg(e);
}
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
}
侦听事件:
using System;
class Fax
{
/// <summary>
///将MailManager对象传递给构造器
/// </summary>
/// <param name="mm"></param>
public Fax(MailManager mm)
{
//构造一个指向FaxMsg回调方法的MailMsgEventHandler
//委托实例。然后登记MailManager的MailMsg事件
mm.MailMsg+=new MailManager.MailMsgEventHandler(FaxMsg);
}
![](/Images/OutliningIndicators/InBlock.gif)
/// <summary>
/// MailManager将调用该方法来通知Fax对象接收到一个新的电子邮件信息
/// </summary>
/// <param name="sender">表示MailManager对象,如果期望和事件的触发着通信,将会用到该参数</param>
/// <param name="e">表示MailManager对象希望提供的一些附加事件信息</param>
private void FaxMsg(Object sender,MailManager.MailMsgEventArgs e)
{
Console.WriteLine("Faxing mail message:");
Console.WriteLine("From :{0}\n To:{1}\n Subject:{2}\n Body:{3}\n",e.from,e.to,e.subject,e.body);
}
/// <summary>
/// 注销事件
/// </summary>
/// <param name="mm"></param>
public void Unregister(MailManager mm)
{
//构造一个指向FaxMsg回调方法的MailMsgEventHandler委托实例
MailManager.MailMsgEventHandler callback=new MailManager.MailMsgEventHandler(FaxMsg);
//注销MailManager的MailMsg事件
mm.MailMsg-=callback;
}
}
发布事件:
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
侦听事件:
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)