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

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);

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: