public class Calculator { //定义计算器事件CalculateEventArgs public class CalculateEventArgs:EventArgs { //只读数据变量 public readonly Int32 x, y; //构造函数-在这里输入数据变量 public CalculateEventArgs(Int32 x,Int32 y) { this.x=x; this.y=y; } } //声明事件委托,名称为CalculateEventHandler //注意前面没有说,多播的委托多数需要返回值是void public delegate void CalculateEventHandler(object Sender, CalculateEventArgs e); //这是计算器类的事件字段,用于外部绑定 public event CalculateEventHandler MyCalculate; //提供一个受保护的虚拟方法,子类可以覆盖它,以便·进行拒绝监视等操作 protected virtual void OnCalculate(CalculateEventArgs e)//注意其参数的写法 { if (MyCalculate!=null) { MyCalculate(this,e);//参数就是为了能正常调用委托类型变量的 } } //进行计算-调用这个方法表示有新的计算发生了 public void Calculate(Int32 x, Int32 y) { CalculateEventArgs e=new CalculateEventArgs(x,y); OnCalculate(e);//还记得委托链吗?能按次序通知所有事件的注册者 } } //定义一个消息触发器-触发消息用的 public class CalculatorManager { //消息通知方法1,定义跟Calculator.CalculateEventArgs一样 public void Add(object Sender,Calculator.CalculateEventArgs e) { System.Windows.Forms.MessageBox.Show("加法结果:" + (e.x + e.y)); } //消息通知方法2,定义跟Calculator.CalculateEventArgs一样 public void Subtract(object Sender, Calculator.CalculateEventArgs e) { System.Windows.Forms.MessageBox.Show("减法结果:" + (e.x - e.y)); } } |