class Cat { private string _name; public Cat(string name) { _name = name; } public void Shout() { Console.WriteLine("瞄,我是"+_name+",我来了!"); CatShout(); //第三步,触发点,事件要加括号 } public delegate void CatShoutEventHandler(); //第一步,声明委托,要加圆括号 public event CatShoutEventHandler CatShout; //第二步,声明事件,类型为以上委托类型 } class Mouse { public string _name; public Mouse(string name) { _name = name; } public void Run() { Console.WriteLine("猫来了,我是"+_name+",快跑!"); } } static void Main(string[] args) { Cat cat=new Cat("Tom"); Mouse jerry=new Mouse("Jerry"); Mouse jack=new Mouse("Jack"); cat.CatShout += new Cat.CatShoutEventHandler(jerry.Run); //第四步,将相关方法的委托登记到事件 cat.CatShout += new Cat.CatShoutEventHandler(jack.Run); cat.Shout(); Console.ReadLine(); }
1、委托是对函数的封装,一旦为委托分配了方法,委托将具有与该方法完全相同的行为。
2、关于事件和委托的关系,可以看作容器和元素的关系,事件是委托的容器,容器(事件)里可以装(登记)许多元素(委托)。当执行事件时,会逐个执行在该事件中登记的委托。
使用委托和事件的步骤:
1、声明委托
2、声明事件,事件类型为以上委托的类型
3、确定触发点
4、将引用方法的委托注册到事件
具体代码可参考最上。