您当前的位置: 首页 >  c#

暂无认证

  • 0浏览

    0关注

    101061博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C#事件-换一个角度理解委托和事件

发布时间:2010-11-22 00:12:00 ,浏览量:0

我们建一个控制台程序。

未使用委托、事件之前的代码        using System;             class Program     {         static void Main(string[] args)         {             //实例化一个button类             Button btn = new Button();             btn.Click();         }     }

    //首先要定义一个Button类,里面应该有一个Click方法     public class Button     {         //Click方法调用固定的方法         public void Click()         {             ForCustome fc = new ForCustome();             fc.Button_Click();         }     }     //上面这个类是封装了的,用户不可见,或者理解为用户不能更

改也可以

    //下面这个类提供给用户     public class ForCustome     {         public void Button_Click()         {             //用户在这里写具体的方法实现             Console.WriteLine("被点击了!");         }

    } 可以看出,以上的代码实现一个按钮是可行的,但两个按钮就麻烦了。不到黄河心不甘,我们硬着头皮再写两个按钮的情况吧。        using System;          class Program     {         static void Main(string[] args)         {             //实例化一个button类             Button btn = new Button();             btn.Click();

            //实例化第二个button             Button btn2 = new Button();             btn2.Click();   //这样写能行么?我们发现,这样写根本不行!         }     }

    //首先要定义一个Button类,里面应该有一个Click方法     public class Button     {         //Click方法调用固定的方法         public void Click()         {             ForCustome fc = new ForCustome();             fc.Button_Click();

            //很想在这里面改呀,添一个方法调用             fc.Button2_Click();     //要是再有一段条件判断的逻辑就更好了,是吧?         }     }     //上面这个类是封装了的,用户不可见,或者理解为用户不能更改也可以

    //下面这个类提供给用户     public class ForCustome     {         public void Button_Click()         {             //用户在这里写具体的方法实现             Console.WriteLine("被点击了!");         }

        //添一个方法实现是必须的         public void Button2_Click()         {             Console.WriteLine("我是第二个被点击的按钮!");         }     } 如果你是自己在试着写的话,估计你已经崩溃了,这样实现太难了!

好了,看看微软是如何解决这个问题的吧。             using System;          //先声明一个委托再说,目标是要能调用ForCustome类里的方法,所以注意方法签名     public delegate void myDelegate();       public class Button     {         //声明一个事件,和委托相关联         public event myDelegate ClickIt;                 public void Click()         {             //可以想象,这个方法是一个封装了之前我们想要的一大段条件判断语句的“复合体”             ClickIt();         }     }

    class Program     {         static void Main(string[] args)         {             ForCustome fc = new ForCustome();

            //实例化一个button类             Button btn = new Button();             //这里,将按钮的事件和按钮事件对应的(将要触发的)方法相关联,相当于我们之前想象的注册             btn.ClickIt += new myDelegate(fc.Button_Click);             btn.Click();

            //实例化第二个button             Button btn2 = new Button();             btn2.ClickIt+=new myDelegate(fc.Button2_Click);             btn2.Click();   //这样写能行么?         }     }

    //这个类提供给用户的,没有变化     public class ForCustome     {         public void Button_Click()         {             //用户在这里写具体的方法实现             Console.WriteLine("被点击了!");         }

        //添一个方法实现是必须的         public void Button2_Click()         {             Console.WriteLine("我是第二个被点击的按钮!");         }     }

关注
打赏
1655516835
查看更多评论
立即登录/注册

微信扫码登录

0.0832s