委托和事件

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DelegateAndEvent
{
   public  class Caculator
    {
        //dim a CaculateEventArgs,used to save the status info when call the event
        public class CaculateEventArgs : EventArgs
        {
            public readonly int x, y;
            public CaculateEventArgs(int x, int y)
            {
                this.x = x;
                this.y = y;
            }
        }
        //dim the event delegate
        public delegate void CalculateEventHandler(object sender,CaculateEventArgs e);
        //dim the event
        public event CalculateEventHandler MyCalculate;
        //support the virtual function
       //提供受保护的虚方法,可以由子类覆写来拒绝监视
        protected virtual void OnCalculate(CaculateEventArgs e)
        {
            if(MyCalculate!=null)
            {
                MyCalculate(this, e);
            }
        }
        //进行计算,调用该发放表示有新的计算发生
        public void Calculate(int x,int y)
        {
            CaculateEventArgs e = new CaculateEventArgs(x,y );
            //通知所有的事件注册者
            OnCalculate(e);
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DelegateAndEvent
{
    /// <summary>
    /// 丁原事件触发者
    /// </summary>
   public  class CaculatorManager
    {
       public void Add(object sender,Caculator.CaculateEventArgs e)
       {
           Console.WriteLine(e.x+e.y );
       }
       public void Substract(object sender,Caculator.CaculateEventArgs e)
       {
           Console.WriteLine(e.x-e.y);
       }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DelegateAndEvent
{
    class Program
    {
        static void Main(string[] args)
        {
            Caculator calculator = new Caculator();
            //事件触发者
            CaculatorManager cm = new CaculatorManager();
            //事件绑定
            calculator.MyCalculate += cm.Add;
            calculator.Calculate(100,200);
            calculator.MyCalculate += cm.Substract;
            calculator.Calculate(100,200);

            //事件注销
            calculator.MyCalculate -= cm.Add;
            calculator.Calculate(100,200);
            Console.Read();
        }
    }
}

输出:

300

300

-100

-100

posted @ 2015-01-08 14:56  龍☆  阅读(209)  评论(0编辑  收藏  举报