委托与事件-闲聊系列(二)

  系列一讲述了生活中的委托与事件的一些场景,本篇我们从C#语言的角度来阐述委托的含义。我们设想一个如下场景:中午下课铃声响了,你去学校食堂排队打饭,你女朋友不想走路,让你打包一份饭给她。下面直接上代码:

public class You
{
   //声明一个委托,其实就是个“命令”
   public delegate void BringLunchEventHandler();

   //自己去食堂吃饭的方法
    public static void HaveLunch()
    {
        Console.WriteLine("去食堂吃饭去了哦!!!");
    }

    //女朋友类
    class Girlfriend
    {
        public static void TakeLunch()
        {
           Console.WriteLine("又要帮女朋友带饭,真懒啊!");
        }

        public static void TaskCandy()
        {
           Console.WriteLine("还要帮女朋友带糖,唉,这女人啊,没办法!");
        }
    }


    public static void Main(string[] args)
    {
        //这里就是具体阐述这个命令是干什么的,本例是你“帮女朋友带饭”
        BringLunchEventHandler lunchDelegate = new BringLunchEventHandler(TakeLunch);
        lunchDelegate += Girlfriend.TakeCandy;//还要带糖
        //这时候委托被附上了具体的方法
        lunchDelegate();
        Console.ReadKey();
     }
}

  女朋友让你去带饭,她只是相当于下了一个指令,你按照她的意思去做就行了。而她告诉你买什么、买多少、去哪里买,这个相当于指定一个方法的签名,不知道这样大家能否比较好的理解。

public delegate void BringLunchEventHandler();

  上面语句即声明了一个委托,委托和方法实际上很相似:相比方法,委托多了一个delegate关键字,没有方法体<这也为什么说委托是一个命令,它什么也不做>。

lunchDelegate += Girlfriend.TakeCandy;//还要带糖

  女朋友让你去带饭,也可以让你买糖,也可以是其它什么。C#中,通过+=运算符则可实现委托链-即把多个方法绑定到委托,

当委托被调用时,其绑定的方法均会依次执行。聪明的你应该想到,-=运算符即是取消某个方法的绑定。

   附加:委托是一种指向方法的类型,类似于C++中的函数指针,代表一个函数的地址。如int是一种类型,2、3、4等均是此类型的值;同理,委托也是一种类型,TakeLunch()、DoSomething(int count,String message)均是此类型的值,所以委托类型代表的是一个方法。

   上面就是我对委托的理解,如有错误之处,欢迎大家指正!下一篇将以同样的方式讲解事件和委托的关系!

 

      

转载于:https://www.cnblogs.com/andylcp/p/3196965.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值