zoukankan      html  css  js  c++  java
  • 委托

    对于委托的理解方式可能每个人都不尽相同,正所谓1000个人心中有1000个哈姆雷特!

    笔者以一种较容易理解的方式太陈述,可能更适合新手,各路大神砖家们请勿喷,感激不尽!!!

    回顾一下上一篇的demo代码,有一些小的改动:

    View Code

    上一篇地址http://www.cnblogs.com/error500/archive/2012/09/14/2684321.html

    前面说过委托也是一个类,可以将方法当作另一个方法的参数来传递,这里没有直接传入方法名,而是定义了两个基于委托的变量,可能更好理解。其实在javascript里面也有一中类似的用法,有时候我们会将一个函数名传给第二个函数,第二个函数会根据函数名执行函数,例如:

    复制代码
    <script type="text/javascript">
      func_handle(func_operate);
      function func_handle(func_name){
        func_name();
      }
      function func_operate(){
        alert("看我像委托吗?");
      }
    </script>
    复制代码

    言归正传,多播委托。首先要说明的一点是,多播委托相关的方法必须是void无返回值的方法。

    多播委托就是可以将多个方法赋值给同一个委托,当调用这个委托的时候,将依次调用所绑定方法,语法如下:

    复制代码
    static void Main(string[] args)
    {
        const string name = @"张三";
        PepoleClass pc = new PepoleClass();
        //给委托类型的变量赋值
        //PepoleClass.SpeakDelegate del_variable = new PepoleClass.SpeakDelegate(pc.SpeakEnglish);
        PepoleClass.SpeakDelegate del_variable = pc.SpeakEnglish;
        //再给此委托绑定一个方法,取消绑定使用-=:del_variable -= pc.SpeakChinese;
    //直接使用=:del_variable = pc.SpeakChinese;会覆盖前面绑定的方法
    del_variable += pc.SpeakChinese; pc.SpeakOperate(name, del_variable);//先调用SpeakEnglish再调用SpeakChinese Console.ReadLine(); }
    复制代码

     
    分类: Delegate
  • 相关阅读:
    二叉树的建立和遍历
    canvas基础入门(一)canvas的width、height于css样式中的宽高区别
    js实现放大镜效果
    ios中页面底部输入框,position:fixed元素的问题
    js input复选框选中父级同时子级也选中
    js apply和call
    javascript闭包理解
    vue.js vue-jsonp解决跨域问题
    vue.js请求数据(axios)
    vuex
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2693119.html
Copyright © 2011-2022 走看看