分享

浅显易懂的委托

 印度阿三17 2020-07-04

一、我对委托的理解

委托是方法的容器,它不生产方法,它只是方法的搬运工。
委托这个词用到编程里面对于很多新人来说可能都不太好理解,以前刚接触委托的时候也看过不少文章,对于这个词的解释大多都云里雾里。
但把“委托”换成“托付”,对于它的理解可能会清晰不少。
例如,刘备将儿子委托给了赵云和刘备将儿子托付给了赵云,这两句话那句比较好理解些呢?我觉得是后者,后者更符合我对委托的理解——委托是方法的容器。
现在,我们以编程的思想来转换一下这两句话,刘备=应用程序,刘备儿子=方法,赵云=容器(委托)
应用程序将方法委托给了容器,应用程序将方法托付给了容器,前者我们可能会想方法从哪里来,是要容器自己编写吗,有了方法后容器需要干嘛呢?
但后者就比较清晰明了,应用程序将方法托付给了容器,说明方法有本来有的编写好的,不需要自己去编写的,然后托付给了容器那他就是容器的东西了,容器想干嘛就干嘛。
字面意思说出来,可能很多朋友还是云里雾里,下面会用代码给大家解释一下,为什么说委托是方法的容器。

二、委托的基本使用
1.生命委托的语法
delegate 接收的方法的返回值 委托名称(接收方法的参数)
例:delegate int Calculator(int numOne,int numTwo);
上例中我们声明了一个名为“Calculator”接收方法返回值类型为int,接收方法参数为int numOne,int numTwo的委托
2.委托的基本使用

class Program
    {
        //声明委托
        private delegate int Calculator(int numOne,int numTwo);
        static void Main(string[] args)
        {
            //将实例方法装进委托
            Calculator dg= new Program().GetSum;
            //调用委托
            var sum = dg(1, 2);
            //输出结果
            Console.WriteLine("计算后的结果为:" sum);
        }

        public int GetSum(int num1, int num2)
        {
            return num1   num2;
        }
    }
View Code

从上面的代码可以看到我声明了一个名为“Calculator”的委托,并将“GetSun”方法给了它,最后求出结果为3。

看到这里很多朋友应该是看不明白委托到底是干嘛用的,咋们直接在Mian里面调用GetSum不就好了吗?何必还声明一个看起来毫无意义的委托呢?吃饱了没事做想多敲代码吗?

别急,现在只是将委托的基本语法和用法,待讲完多播委托匿名函数委托后会将委托的妙用,了解这些的小伙伴可以直接跳过进入妙用。

3.多播委托

class Program
    {
        //声明委托
        private delegate int Calculator(int numOne,int numTwo);
        static void Main(string[] args)
        {
            //将实例方法装进委托
            Calculator dg= new Program().GetSum;
            dg =new Program().Reduce;
            //调用委托
            var sum = dg(1, 2);
            //输出结果
            Console.WriteLine("计算后的结果为:" sum);
            Console.ReadKey();
        }

        public int GetSum(int num1, int num2)
        {
            Console.WriteLine("加法");
            return num1   num2;
        }

        public int Reduce(int num1, int num2)
        {
            Console.WriteLine("减法");
            return num1 - num2;
        }
    }
View Code

这里我心加了一个“Reduce”方法,并且为了便于观察我在“Reduce”方法和“GetSun”方法中都输出了一段话,至于它为什么返回-1是因为它返回的是“Reduce”的值。

可以看到,多播委托其实就是在原有委托基础上在加一个方法,这也证实了前面我说的委托是方法的容器,当委托里面的方法有多个的时候这个委托就成了多播委托

当我们调用多播委托的时候它会按照委托里面的方法的添加顺序去执行方法体

4.匿名函数委托

通过上面的例子可以看到无论是普通委托还是多播委托,使用它都非常的麻烦都需要定义方法,并传入其中,这样比较麻烦,想一想,如果你要实现一个有是个方法的多播委托,那是不是得定义十个方法,代码量想想就恐怖。

上面也说过委托是方法的容器,所以这里我们可以通过拉姆达表达式传入匿名方法的方式来缩少一定的代码量。

 

class Program
    {
        //声明委托
        private delegate int Calculator(int numOne,int numTwo);
        static void Main(string[] args)
        {
            //将匿名方法装进委托
            Calculator dg = (int num1, int num2) => {Console.WriteLine("加法"); return num1   num2; };
            //将匿名方法装进委托
            dg  = (int num1, int num2) => { Console.WriteLine("减法"); return num1 - num2; };
            //调用委托
            var sum = dg(1, 2);
            //输出结果
            Console.WriteLine("计算后的结果为:" sum);
            Console.ReadKey();
        }
    }
View Code

 

这段代码实现的效果和上面的多播委托的效果是一样的,效果图我就不发了

三、委托的妙用

看完上面的代码肯定有很多朋友看不明白委托到底是干嘛用的,为什么我要写多余的代码,要知道世间万物皆有它存在的道理,委托也不例外,下面我将写一些容易理解的例子让大家理解下它的妙用!

晚上更新!

 

来源:https://www./content-4-718801.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多