zoukankan      html  css  js  c++  java
  • 委托和事件

            委托和事件 事件是通过委托联系起来的,委托才是事件的核心内容,如果没有委托,事件就什么都不是了。

           例如在三连击事件中: 三连击事件被触发,要执行的代码,这里的代码不能“写死”,要有将来使用该控件的用户来定义三连击之后要执行什么样的代码也就是说这里需要执行一段代码,而这个方法具有现在不确定,由将来的按钮使用者来决定,场景非常类似于委托的使用。        

               

     1 private void Form1_Load(object sender, EventArgs e)        
     2 
     3                              {            
     4 
     5                                //button三连击1.TripleClickHandler = Do;出现错误            
     6 
     7                                 button三连击1.TripleClickHandler += Do;            
     8 
     9                                button三连击1.TripleClickHandler += new TripleClickDelegate(button三连击1_TripleClickHandler);            
    10 
    11                                button三连击1.TripleClickHandler+=new TripleClickDelegate(button三连击2_TripleClickHandler1);        
    12 
    13                               }
    14 
    15                               void button三连击1_TripleClickHandler()        
    16 
    17                               {            
    18 
    19                                     MessageBox.Show("你好");        
    20 
    21                               }
    22 
    23                              void button三连击2_TripleClickHandler1()        
    24 
    25                              {            
    26 
    27                                 MessageBox.Show("我好");        
    28 
    29                             }      

            委托可以直接调用也可以保存一个方法。 通过委托来实现事件的时候,则会造成一个问题:委托在空间外部也能被触发。 委托时可以通过“等号”直接赋值的,所以就有可能造成将前面所有绑定的方法覆盖掉了。

            使用一个事件的时候: 第一步:定义一个委托 Public delegate void TripleClickDelegate 通过该委托定义一个事件: Public  event TripleClickDelegate TripleClickHandler; 用关键字event,其实声明事件的过程就是在声明委托变量的基础上加上一个evetn使用事件的方式与调用委托的事件一样。 事件不能通过=赋值,为了解决这个问题。就使用了+=和-=来赋值,这样就避免了覆盖的问题。通过event来进行赋值的时 事件不能再外部来触发。只能在声明事件的类内部来触发该事件,避免了冒充事件的问题。

          委托的作用: 占位,在不知道将来要执行的方法的具体代码的时候。可以先用一个委托变量来代替方法调用(委托的返回值,参数列表要确定)。在实际调用之前,需要为委托赋值,否则为null. 事件的作用:事件的作用于委托变量一样,只是功能上比稳妥变量有更多的限制。

  • 相关阅读:
    Linux安装python3.6
    Python安装常见问题(1):zipimport.ZipImportError: can't decompress data
    ModuleNotFoundError: No module named 'apt_pkg'
    【第九届蓝桥杯大赛决赛真题】JAVA大学C组题解
    Mineweep(扫雷)
    Josephus环的四种解法(约瑟夫环)
    java背包的数组实现,链表实现
    Java 实现栈,队列
    java实现单链表
    MySql8最新配置方式(完美)
  • 原文地址:https://www.cnblogs.com/hanwenhuazuibang/p/2965191.html
Copyright © 2011-2022 走看看