委托

对于委托的理解方式可能每个人都不尽相同,正所谓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
原文地址:https://www.cnblogs.com/Leo_wl/p/2693119.html