zoukankan      html  css  js  c++  java
  • 用一个简单的例子来演绎事件委托

    本篇博文,Insus.NET想使用一个超简单的例子来演绎事件委托。

    我们在开发网页时,刚开始时在网页的顶部放一个铵钮(web control),想实现一个功能。


    在xxx.aspx.cs:


    OK,某一天,此网页的内容随时间而增长,出现了滚屏。想在网页的底再放一个铵钮,这个铵钮执行事件跟网页顶部铵钮一的事件一样的。

     


    这样子,不管是点击按哪一个铵钮,所执行的事件是一样的:



    也许一开始你并没有想到onClick的事件名,直接使用铵钮一的onClick的名称,而是如下面的写法:



    在xxx.aspx.cs,我们会使用习惯的习惯,拷贝铵钮一的事件粘贴在铵钮二的事件里:



    呵呵,此时网页在运行时,点击按钮二与点击铵钮一执行的是相同的事情。

    某一天,你回过头来Review你写的代码,会发现代码已经冗余了,你会建一个私有方法,把铵钮一或二的事件代码粘贴于这个方法内,然后在铵钮一或二执行这个方法即可。

     上面好象没有看到任何事件委托情形。没有关系,我们稍改一下xxx.aspx写法吧,在网页中,不写onClick事件,而是在cs中产生:

     
    然后在xxx.aspx.cs:


    此时,网页运行起来,没有什么不同。执行事件与效果跟前面动画演示一样。

    我们再重新看看这个xxx.aspx.cs的代码:



    发现:

    protected void Button1_Click(object sender, EventArgs e)

    protected void Button2_Click(object sender, EventArgs e)


    所执行的代码完全一样,只是这个事件名称不同。

    既然一样,我们就可以跟上面重构方法一样,定义一个相同的名称,参照下面五个步骤:




    最后再重构一步:



    把xxx.aspx.cs所有注释删除,此时,我们看到了事件的委托:


  • 相关阅读:
    Codeforces Round #551 (Div. 2) F. Serval and Bonus Problem (DP/FFT)
    Codeforces Round #551 (Div. 2) E. Serval and Snake (交互题)
    BZOJ 5495: [2019省队联测]异或粽子 (trie树)
    洛谷【P2669】NOIP2015普及组 T1金币
    解决Win 10上SSD缓慢问题
    如何保障数据安全
    一个网工的linux学习过程
    JS实现select去除option的使用注意事项
    codevs1506传话(kosaraju算法)
    我的园子
  • 原文地址:https://www.cnblogs.com/insus/p/3732075.html
Copyright © 2011-2022 走看看