委托是对函数的封装,可以当做给方法的特征指定一个名称。而事件则是委托的一种特殊形式,当发生有意义的事情时,事件对象处理通知过程。
委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。
在发生其他类或对象关注的事情时,类或对象可通过事件通知它们。
EventArgs 是包含事件数据的类的基类。
1 public class Cat 2 { 3 private string name; 4 5 public Cat(string name) 6 { 7 this.name = name; 8 } 9 10 public delegate void CatShoutEventHandler(object sender,CatShoutEventArgs args);11 12 public event CatShoutEventHandler CatShout;13 14 public void Shout()15 {16 Console.WriteLine("喵,我是{0}.",name);17 18 if (CatShout !=null)19 {20 CatShoutEventArgs e=new CatShoutEventArgs();21 e.Name = this.name;22 CatShout(this,e);23 }24 }25 }
1 public class CatShoutEventArgs : EventArgs 2 { 3 private string name; 4 5 public string Name 6 { 7 get { return name; } 8 set { name = value; } 9 }10 }
1 public class Mouse 2 { 3 private string name; 4 5 public Mouse(string name) 6 { 7 this.name = name; 8 } 9 10 public void Run(object sender,CatShoutEventArgs args)11 {12 Console.WriteLine("老猫{0}来了,{1} 快跑!",args.Name,name);13 }14 }
1 static void Main(string[] args) 2 { 3 Cat cat=new Cat("Tom"); 4 5 Mouse mouse1=new Mouse("Jerry"); 6 Mouse mouse2=new Mouse("Jack"); 7 8 cat.CatShout += new Cat.CatShoutEventHandler(mouse1.Run); 9 cat.CatShout += new Cat.CatShoutEventHandler(mouse2.Run);10 11 cat.Shout();12 13 Console.Read();14 }