一个事件的例子

 class Program
    {
        static void Main(string[] args)
        {
            MailManager mail = new MailManager();
            new Fax(mail);
            mail.SimulateNewMail("123", "234", "456");

            Console.ReadKey();
        }

    }

    internal class NewMailEventArgs : EventArgs
    {
        private readonly string m_from, m_to, m_subject;
        public NewMailEventArgs(string from,string to,string subject)
        {
            this.m_to = to;
            this.m_from = from;
            this.m_subject = subject;
        }

        public string Form { get { return m_from; } }
        public string To { get { return m_to; } }
        public string Subject { get { return m_subject; } }
    }

    internal   class MailManager
    {
        public event EventHandler<NewMailEventArgs> NewMail;

        protected virtual void OnNewMail(NewMailEventArgs e)
        {

            EventHandler<NewMailEventArgs> temp = Interlocked.CompareExchange(ref NewMail, null, null);
            if (temp!=null)
            {
                temp(this,e);
            }
        }

        public void SimulateNewMail(string from,string to,string subject)
        {
            NewMailEventArgs e = new NewMailEventArgs(from,to,subject);
            OnNewMail(e);
        }
    }

    internal sealed class Fax
    {

        public Fax(MailManager mm)
        {
            mm.NewMail += FaxMsg;
        }

        private void FaxMsg(object sender, NewMailEventArgs e)
        {
            Console.WriteLine("Faxing Mail message:");
            Console.WriteLine("to={0},from={1},subject={2}",e.To,e.Form,e.Subject);
        }

        public  void  Unregister(MailManager mm)
        {
            mm.NewMail -= FaxMsg;
        }
    }
时间: 2024-10-13 01:44:21

一个事件的例子的相关文章

Android 属性动画监听事件与一个菜单的例子

简单监听事件 package com.example.animation; import android.animation.Animator; import android.animation.Animator.AnimatorListener; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; import android.animation.ObjectAnimat

C# 委托和事件(三):一个简单的例子

一个好的 IDE 把大量应该 coding 的部分都省掉了,比如说 windows form 应用程序,在 VS 里直接拖放控件,F4 属性窗口中可以设置大量的初始属性,包括事件和响应.通过 VS 自动生成的代码,来看看 windows form 应用程序在事件方面是如何处理的. 新建一个 windows form 应用程序,往默认的窗体上拖放一个按钮 button1 这里可以通过 F4 属性窗口设置按钮的文本.位置.大小等一切属性.包括事件和事件的响应程序: 在解决方案管理器中打开 Form1

Android Handler的一个简单使用例子

在前面 开启一个线程Thread并用进度条显示进度 这篇文章里,我们用线程实现了这么一个简单的功能,就是点击按钮,加载进度条.但是有没有发现,点击一次之后,再次点击就会没效.我们可是需要每次点击都要显示下一张图片的.永盈会娱乐城 这里就需要引入 Android 的消息机制了,简单来说,就是 Handler.Looper 还有 Message Queue的使用.这里我们用一个简单的例子来说明 Handler 的使用,就是每次点击按钮,给消息队列发送一个数字 5.还是在 PaintingActivi

C# 委托与事件的例子

今天在一个项目中看到委托与事件的使用,故重新整理一个简单易懂的例子,仅供参考而已. namespace DelegateAndEvent { public delegate void delegateTest(int a);//定义一个委托 public delegate void delegateErr(Exception e);//定义一个报错委托 class Program { static void Main(string[] args) { object r = Console.Rea

duilib DirectUI库里面的一个简单的例子RichListDemo

http://blog.csdn.net/zengraoli/article/details/9993153 2013-08-16 00:08 3289人阅读 评论(2) 收藏 举报 目录(?)[+] 1.首先来看这里的CRichListWnd 已经不再是从CWindowWnd继承了 classCRichListWnd:publicWindowImplBase 从WindowImplBase中,可以看到有三个抽象函数: virtualCDuiStringGetSkinFolder()=0; vi

一个简单的例子搞懂ES6之Promise

ES5中实现异步的常见方式不外乎以下几种: 1. 回调函数 2. 事件驱动 2. 自定义事件(根本上原理同事件驱动相同) 而ES6中的Promise的出现就使得异步变得非常简单.promise中的异步是这样的: * 每当我需要执行一次异步操作的时候,我都需要new一个promise对象 * 每一个异步操作的Promise对象都需要设定一个成功执行的条件和成功的回调.一个失败的条件和失败的回调 * Promise对象可通过执行then()方法获得成功的回调信息 * Promise对象可通过执行ca

事件简单例子

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Runtime.InteropServices; 6 7 namespace EventTest 8 { 9 /// <summary> 10 /// 事件订阅者类 11 /// </summary> 12 class Program 13 { 14 static v

事件封装(多个函数绑定一个事件,估计这样解释不对)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/> <!-

【Python】一个简单的例子

问题描述: Python基础篇 参考资料: (1)http://www.cnblogs.com/octobershiner/archive/2012/12/04/2801670.html (2)http://www.cnblogs.com/itech/archive/2010/06/20/1760345.html 例子: 求解Fibonacci glb_var.py gl_count=1 path.py # coding:utf-8 ''' Created on 2014-4-28 @autho