C# 事件
2015-11-16 18:45
393 查看
/// <summary> /// 事件数据 /// </summary> internal sealed class NewMailEventArgs : EventArgs { private readonly String m_from, m_to, m_subject; public NewMailEventArgs(String from, String to, String subject) { m_from = from; m_to = to; m_subject = subject; } /// <summary> /// 发件人 /// </summary> public String From { get { return m_from; } } /// <summary> /// 收件人 /// </summary> public String To { get { return m_to; } } /// <summary> /// 标题 /// </summary> public String Subject { get { return m_subject; } } } internal class MailManager { private EventHandler<NewMailEventArgs> m_NewMail; // 事件属性 public event EventHandler<NewMailEventArgs> NewMail { add { m_NewMail += value; } remove { m_NewMail -= value; } } protected virtual void OnNewMail(NewMailEventArgs e) { //EventHandler<NewMailEventArgs> temp = // Interlocked.CompareExchange(ref m_NewMail, null, null); //if (temp != null) temp(this, e); if (m_NewMail != null) { m_NewMail.Invoke(this,e); } } /// <summary> /// 模拟新邮件 /// </summary> /// <param name="from"></param> /// <param name="to"></param> /// <param name="subject"></param> public void SimulateNewMail(String from, String to, String subject) { NewMailEventArgs e = new NewMailEventArgs(from, to, subject); OnNewMail(e); } } /// <summary> /// 传真 /// </summary> internal sealed class Fax { public Fax(MailManager mm) { mm.NewMail += FaxMsg; } private void FaxMsg(Object sender, NewMailEventArgs e) { Console.WriteLine("传真邮件信息:"); Console.WriteLine(" From={0}, To={1}, Subject={2}", e.From, e.To, e.Subject); } public void Unregister(MailManager mm) { mm.NewMail -= FaxMsg; } } internal sealed class Pager { public Pager(MailManager mm) { mm.NewMail += SendMsgToPager; } private void SendMsgToPager(Object sender, NewMailEventArgs e) { Console.WriteLine("发送邮件到寻呼机:"); Console.WriteLine(" From={0}, To={1}, Subject={2}", e.From, e.To, e.Subject); } public void Unregister(MailManager mm) { mm.NewMail -= SendMsgToPager; } }
客户端:
static void Main(string[] args) { // Construct a MailManager object MailManager mm = new MailManager(); // Construct a Fax object passing it the MailManager object Fax fax = new Fax(mm); // Construct a Pager object passing it the MailManager object Pager pager = new Pager(mm); // Simulate an incoming mail message mm.SimulateNewMail("Jeffrey", "Kristin", "I Love You!"); // Force the Fax object to unregister itself with the MailManager fax.Unregister(mm); // Simulate an incoming mail message mm.SimulateNewMail("Jeffrey", "Mom & Dad", "Happy Birthday."); }
相关文章推荐
- Multipart Form Post in C#
- C# 格式化表
- (原创)c#学习笔记10--定义类成员06--示例应用程序03--类库的客户应用程序
- C# 文件从utf8或系统默认格式转gbk写入新文件(支持有bom和无bom)
- (原创)c#学习笔记10--定义类成员06--示例应用程序02--编写类库
- c#中异步调用asyn
- (原创)c#学习笔记10--定义类成员06--示例应用程序01--规划应用程序
- C#判断手机访问和电脑访问程序代码
- (原创)c#学习笔记10--定义类成员05--部分方法定义
- C#位运算讲解与示例[转]
- (原创)c#学习笔记10--定义类成员04--部分类定义
- C#委托的介绍(delegate、Action、Func、predicate)
- C#稳固基础:传统遍历与迭代器
- C#集合之STACK
- C# 计算时间差 用timespan函数
- C# 获取当前文件名、执行函数、执行代码行数和列数
- C# Stopwatch
- C# 中? 和 ?? 在变量中的使用
- c# delegate的invoke和bejinInvoke的区别
- C#编程实现DataTable添加行的方法