事件的应用
class PubEventArgs : EventArgs
{
private readonly string m_name;
private readonly DateTime m_date;
public PubEventArgs (string name,DateTime date )
{
m_name=name ;
m_date = date;
}
public string name
{
get
{
return m_name;
}
}
public DateTime date
{
get
{
return m_date;
}
}
}
class Publisher //发行方
{
public delegate void PubComputerEventHandler(object sender, PubEventArgs e); //定义委托
public delegate void PubLifeEvertHandler(object sender, PubEventArgs e); //定义委托
public event PubComputerEventHandler pubcomputer; //定义事件 格式:【访问修饰符】 + event + 委托 +事件名
public event PubLifeEvertHandler publife; //定义事件
public virtual void OnComputer(PubEventArgs e)
{
PubComputerEventHandler handler = pubcomputer; //声明临时委托
if (handler != null)
{
handler(this,e );
}
}
public virtual void OnLife(PubEventArgs e)
{
PubLifeEvertHandler handler = publife;
if(handler !=null )
{
handler(this, e);
}
}
public void IstureComputer(string name, DateTime date) //触发电脑杂志事件
{
Console.WriteLine("发行" + name);
OnComputer(new PubEventArgs (name,date ));
}
public void IstrueLife(string name, DateTime date) //触发生活杂志事件
{
Console.WriteLine("发行" + name);
OnLife(new PubEventArgs(name, date));
}
}
class Reader //订阅事件
{
private string name;
public Reader(string name)
{
this.name = name;
}
public void Receive(object sender, PubEventArgs e) //必须和委托参数一样
{
Console.WriteLine(e.date + "已收到" + name + e.name);
}
}
class Test
{
static void Main()
{
Publisher aa = new Publisher();
Reader zs = new Reader("张三");
//订阅事件 格式:事件名+=new 委托名()
aa.pubcomputer += new Publisher.PubComputerEventHandler(zs.Receive); //触发事件
Reader ls = new Reader("李四");
aa.pubcomputer += new Publisher.PubComputerEventHandler(ls.Receive); //触发事件
aa.publife += new Publisher.PubLifeEvertHandler(ls.Receive); //触发事件
aa.IstureComputer ("电脑杂志" , Convert.ToDateTime("2005-08-18"));
aa.IstrueLife("生活杂志" , Convert.ToDateTime("2005-08-18"));

}
}


浙公网安备 33010602011771号