详解C#中的委托

2019-12-30 15:48:30刘景俊

总结:也就是当你只能确定方法的函数签名,无法确定方法的具体执行时,为了能够更好的扩展,以类似于注入方法的形式来实现新增的功能,就能体现出委托的价值。

委托和直接调用函数的区别:用委托就可以指向任意的函数,哪怕是之前没定义的都可以,而不用受限于哪几种。

多播委托

组合的委托必须是同一个类型,其相当于创建了一个按照组合的顺序依次调用的新委托对象。委托的组合一般是给事件用的,用普通委托的时候很少用。

通过+来实现将方法添加到委托实例中,-来从委托实例中进行方法的移除。

+和-纯粹是为了简化代码而生的,实际上其调用的分别是Delegate.Combine方法和Delegate.Remove。

如果委托中存在多个带返回值的方法,那么调用委托的返回值是最后一个方法的返回值。


public static void MultipleShow()
    {
      //多播委托
      NoParaWithReturnEventHandler _NoParaWithReturnEventHandler = new NoParaWithReturnEventHandler(GetDateTime);
      _NoParaWithReturnEventHandler += GetDateTime;
      Console.WriteLine(_NoParaWithReturnEventHandler());
    }
    public static string GetDateTime()
    {
      return string.Format("今天是{0}号。", DateTime.Now.Day.ToString());
    }

C#,委托

委托总结:

委托封装了包含特殊返回类型和一组参数的行为,类似包含单一方法的接口; 委托类型声明中所描述的类型签名决定了哪个方法可用于创建委托实例,同时决定了调用的签名; 为了创建委托实例,需要一个方法以及(对于实例方法来说)调用方法的目标; 委托实例是不易变的,就像String一样; 每个委托实例都包含一个调用列表——一个操作列表; 事件不是委托实例——只是成对的add/remove方法(类似于属性的取值方法/赋值方法)。

常见使用场景:窗体传值、线程启动时绑定方法、lambda表达式、异步等等。

生活中的例子:现在不是大家都在抢火车票吗,使用云抢票就相当于使用委托,你可以直接自己买票,也可以托管于云抢票,自己抢票的话,在快要开枪的时候,你必须时刻刷新,下单输验证码等等,使用云抢票的话,你只要放票前,提前输入抢票信息,就再也不需要你管了,自动出票,你根本不需要知道云抢票那边是怎么帮你实现抢票的。相同时间和车次可以做成一个委托实例,有很多人都通过这个委托实例来进行抢票操作。

源码下载:http://www.easck.com/s/1dEPlxJj

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持ASPKU!