C# 事件
/// <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."); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?