首页 > 代码库 > 委托和事件

委托和事件

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

委托和事件