委托和事件
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
好的程序员,他们删掉的代码,比留下来的还要多很多。