2012/12/3 C#事件处理机制
2012-12-03 20:54
495 查看
/*
* 由SharpDevelop创建。
* 用户: yangkaizhang
* 日期: 2012/12/3
* 时间: 18:48
*
* 要改变这种模板请点击 工具|选项|代码编写|编辑标准头文件
*/
using System;
class PubEventArgs:EventArgs
{
private readonly string m_magazineName;
private readonly DateTime m_pubDate;
public PubEventArgs(string magazineName,DateTime pubDate)
{
m_magazineName = magazineName;
m_pubDate = pubDate;
}
public string magazineName
{
get{ return m_magazineName;}
}
public DateTime pubDate
{
get{ return m_pubDate;}
}
}
class Publisher //出版社
{
public delegate void PubComputerEventHandler(object sender,PubEventArgs
e);//声明事件所需要的代理 1 返回值必需为void
public delegate void PubLifeEventHandler(object sender,PubEventArgs
e);
public event PubComputerEventHandler PubComputer;//事件声明 2
public event PubLifeEventHandler PubLife;
protected virtual void OnPubComputer(PubEventArgs e)
{
PubComputerEventHandler handler = PubComputer;
if (handler != null)
{
handler(this,e);
}
}
protected virtual void OnPubLife(PubEventArgs e)
{
PubLifeEventHandler handler = PubLife;
if (handler != null)
{
handler(this,e);
}
}
public void issueCoumputer(string magazineName,DateTime pubDate)//触发事件方法
3
{
Console.WriteLine("发行"+magazineName);
OnPubComputer(new PubEventArgs(magazineName,pubDate));
}
public void issueLife(string magazineName,DateTime pubDate)
{
Console.WriteLine("发行"+magazineName);
OnPubLife(new PubEventArgs(magazineName,pubDate));
}
}
class Subscriber//订阅者
{
private string name;
public Subscriber(string name)
{
this.name = name;
}
public void Receive(object sender,PubEventArgs e)//订阅者事件处理程序
4//和委托定义相一致(参数和返回类型)
{
Console.WriteLine(e.pubDate+name +"已收到"+ e.magazineName);
}
}
namespace TEvent
{
class Program
{
public static void Main(string[] args)
{
Publisher pub = new Publisher();
Subscriber zs = new Subscriber("张三");
pub.PubComputer += new Publisher.PubComputerEventHandler(zs.Receive);//向发行者订阅一个事件
Subscriber ls = new Subscriber("李四");
pub.PubComputer += new Publisher.PubComputerEventHandler(ls.Receive);
pub.PubLife += new Publisher.PubLifeEventHandler(ls.Receive);
pub.issueCoumputer("电脑杂志",Convert.ToDateTime("2006-01-01\t"));//触发事件
pub.issueLife("生活杂志",Convert.ToDateTime("2006-01-01\t"));
Console.WriteLine("一年后");
pub.PubComputer -= new Publisher.PubComputerEventHandler(ls.Receive);
pub.issueCoumputer("电脑杂志",Convert.ToDateTime("2007-01-01\t"));//触发事件
pub.issueLife("生活杂志 ",Convert.ToDateTime("2007-01-01\t"));
Console.ReadKey(true);
}
}
}
* 由SharpDevelop创建。
* 用户: yangkaizhang
* 日期: 2012/12/3
* 时间: 18:48
*
* 要改变这种模板请点击 工具|选项|代码编写|编辑标准头文件
*/
using System;
class PubEventArgs:EventArgs
{
private readonly string m_magazineName;
private readonly DateTime m_pubDate;
public PubEventArgs(string magazineName,DateTime pubDate)
{
m_magazineName = magazineName;
m_pubDate = pubDate;
}
public string magazineName
{
get{ return m_magazineName;}
}
public DateTime pubDate
{
get{ return m_pubDate;}
}
}
class Publisher //出版社
{
public delegate void PubComputerEventHandler(object sender,PubEventArgs
e);//声明事件所需要的代理 1 返回值必需为void
public delegate void PubLifeEventHandler(object sender,PubEventArgs
e);
public event PubComputerEventHandler PubComputer;//事件声明 2
public event PubLifeEventHandler PubLife;
protected virtual void OnPubComputer(PubEventArgs e)
{
PubComputerEventHandler handler = PubComputer;
if (handler != null)
{
handler(this,e);
}
}
protected virtual void OnPubLife(PubEventArgs e)
{
PubLifeEventHandler handler = PubLife;
if (handler != null)
{
handler(this,e);
}
}
public void issueCoumputer(string magazineName,DateTime pubDate)//触发事件方法
3
{
Console.WriteLine("发行"+magazineName);
OnPubComputer(new PubEventArgs(magazineName,pubDate));
}
public void issueLife(string magazineName,DateTime pubDate)
{
Console.WriteLine("发行"+magazineName);
OnPubLife(new PubEventArgs(magazineName,pubDate));
}
}
class Subscriber//订阅者
{
private string name;
public Subscriber(string name)
{
this.name = name;
}
public void Receive(object sender,PubEventArgs e)//订阅者事件处理程序
4//和委托定义相一致(参数和返回类型)
{
Console.WriteLine(e.pubDate+name +"已收到"+ e.magazineName);
}
}
namespace TEvent
{
class Program
{
public static void Main(string[] args)
{
Publisher pub = new Publisher();
Subscriber zs = new Subscriber("张三");
pub.PubComputer += new Publisher.PubComputerEventHandler(zs.Receive);//向发行者订阅一个事件
Subscriber ls = new Subscriber("李四");
pub.PubComputer += new Publisher.PubComputerEventHandler(ls.Receive);
pub.PubLife += new Publisher.PubLifeEventHandler(ls.Receive);
pub.issueCoumputer("电脑杂志",Convert.ToDateTime("2006-01-01\t"));//触发事件
pub.issueLife("生活杂志",Convert.ToDateTime("2006-01-01\t"));
Console.WriteLine("一年后");
pub.PubComputer -= new Publisher.PubComputerEventHandler(ls.Receive);
pub.issueCoumputer("电脑杂志",Convert.ToDateTime("2007-01-01\t"));//触发事件
pub.issueLife("生活杂志 ",Convert.ToDateTime("2007-01-01\t"));
Console.ReadKey(true);
}
}
}
相关文章推荐
- 关于c#中的事件处理机制
- Flex、Java、C#、JavaFX的事件处理机制的比较
- C#中的事件处理机制
- 浅析Java与C#的事件处理机制(转)
- 浅谈Java与C#的事件处理机制
- C#的事件处理机制应用
- Flex、Java、C#、JavaFX的事件处理机制的比较
- C#中的预定义事件处理机制
- 关于c#中的事件处理机制
- 【转】C#中的预定义事件处理机制
- C# 事件处理机制
- C#中消息处理机制(事件与委托)
- 浅析Java与C#的事件处理机制
- C#中的预定义事件处理机制(转)
- 浅析Java与C#的事件处理机制
- 了解c#中的事件处理机制
- 从面向对象编程的角度解析c#中的事件处理机制
- C#中的事件处理机制
- C#的事件处理机制
- 程序员手记:Java与C#的事件处理机制