极简建站,南京做网站的公司,二手房网站开发背景,高端网站设计制作方法首先举一个实例#xff1a;创建一个控制台程序#xff0c;需求是#xff1a;有一只猫Tom#xff0c;有两只老鼠Jerry和Jack#xff0c;Tom只叫一声“喵#xff0c;我是Tom”#xff0c;两只老鼠就说“老猫来了#xff0c;快跑”#xff0c;我们来分析一下#xff1a;…首先举一个实例创建一个控制台程序需求是有一只猫Tom有两只老鼠Jerry和JackTom只叫一声“喵我是Tom”两只老鼠就说“老猫来了快跑”我们来分析一下我们需要Cat和Mouse类两个类当Cat的Shout方法触发的时候Mouse就执行Run方法不过这里如何让Shout触发式通知两只老鼠呢显然老猫不会通知老鼠“我来了你们快跑”。所以我们在Cat类中不应该关联Mouse类的。这个时候委托事件就是最好的处理方法了。委托是对函数的封装可以当作方法的特征指定一个名称。而事件则是委托的一种特殊形式当发生有意义的事件时时间对象处理通知过程。委托是一种引用方法的类型。一旦为委托分配了方法委托将与该方法具有完全相同的行为委托用关键字delegate来声明而事件就是说在发生其他类或者对象关注事件时类或对象可通过事件通知他们事件的关键字 用event声明。 1: class Cat2 2: { 3: private string name; 4: public Cat2(string name) 5: { 6: this.name name; 7: } 8: public delegate void CatShoutEventHandler(); 9: public event CatShoutEventHandler CatShout; 10: public void Shout() 11: { 12: Console.Write(喵,我是{0}., name); 13: if (CatShout ! null) 14: CatShout(); 15: } 16: } 17: 18: class Mouse 19: { 20: private string name; 21: public Mouse(string name) 22: { 23: this.name name; 24: } 25: public void Run() 26: { 27: Console.WriteLine(老猫来了{0}快跑!, name); 28: } 29: } 30: 31: static void Main(string[] args) 32: { 33: Cat2 cat new Cat2(Tom); 34: Mouse mouse1 new Mouse(Jerry); 35: Mouse mouse2 new Mouse(Jace); 36: cat.CatShout new Cat2.CatShoutEventHandler(mouse1.Run); 37: cat.CatShout new Cat2.CatShoutEventHandler(mouse2.Run); 38: cat.Shout(); 39: Console.Read(); 40: } new Cat2.CatShoutEventHandler(mouse1.Run)的含义是实例化一个委托而委托的实例其实就是Mouse的Run方法。而“cat.CahShout ”表示cat.add_CatShout(new Cat2.CatShoutEventHandler(mouse1.Run))的意思。运行的结果 我们平时在点击一个按钮的时候通常看到这样子的东西private void button5_Click(object sender, EventArgs e) 这里的sender和e有什么用呢我们首先修改一下上面的例子 1: class Cat2 2: { 3: private string name; 4: public Cat2(string name) 5: { 6: this.name name; 7: } 8: public delegate void CatShoutEventhandler(object sender, CatShoutEventArgs args); 9: public event CatShoutEventhandler CatShout; 10: public void Shout() 11: { 12: Console.Write(喵,我是{0}., name); 13: if (CatShout ! null) 14: { 15: CatShoutEventArgs e new CatShoutEventArgs(); 16: e.Name this.name; 17: CatShout(this, e); 18: } 19: } 20: } 21: 22: class Mouse 23: { 24: private string name; 25: public Mouse(string name) 26: { 27: this.name name; 28: } 29: public void Run(object sender, CatShoutEventArgs args) 30: { 31: Console.WriteLine(老猫{0}来了{1}快跑, args.Name, name); 32: } 33: } Main函数不变。这个时候的结果是 转载于:https://www.cnblogs.com/chenamo5776/archive/2011/11/13/2247177.html