一句话说明白什么是委托

    xiaoxiao2025-11-16  3

    委托就是一个方法,一个没有代码块并且能作为参数的方法。

    (注:这里的委托是指委托对象而不是委托类,因为委托的类与实例化的对象都被称为“委托”)

        其实直接说委托就是一个方法并不准确,但这样也不无道理且更容易理解,下面细细道来。

    1.为什么说委托就是一个方法?

    先看代码:

    using System; namespace 委托demo控制台 {         class Program     {         public delegate void DoWork(string str);         static void Main(string[] args)         {             DoWork dowork = Work;             dowork("Hi,I'm Wangzhengkun!");         }         public static void Work(string str)         {             Console.WriteLine(str);             Console.ReadKey();         }     } } 运行结果:

            咱们一步一步来解释代码,首先看这一段:

    static void Main(string[] args)         {             DoWork dowork = Work;             dowork("Hi,I'm Wangzhengkun!");         }

            主要看这一句:

    dowork("Hi,I'm Wangzhengkun!");          如果不看其他的,其实这就是一个标准的方法调用。方法名称是dowork,参数是string类型的“Hi,I'm Wangzhengkun”

          所以说:委托其实就是一个方法

    再看他上面的这一句:

    DoWork dowork = Work;            这里声明了dowork,然后将Work赋值给了dowork。

         重点来了啊,我们声明dowork之后把一个实际的方法Work直接赋值给了dowork,然后dowork就能和Work一样使用。

         为啥要叫委托呢?委托,就是Work委托dowork去做本该由Work去做的事情。所以把dowork叫做委托。

    2.委托是一个类型

              上面不是刚刚说了委托是方法么?怎么又成了类了?

        原因在于在C#中对象与类型都叫委托。

    看下面代码

                DoWork dowork = Work;          这是一个典型定义一个变量的一句代码,和int a=0完全一样,DoWork是类型如同int,只不过这个类型是我们自己定义的,定义的代码是这句:

    public delegate void DoWork(string str);        所以在下面这句代码中 DoWork dowork = Work;

            dowork叫委托,Dowork也叫委托。在上一节中说的委托是一个方法说的是dowork,而在这里说委托是类型说的是Dowork。

    3.委托的定义

    public delegate void DoWork(string str);          在上面这句代码中就定义了委托DoWork,定义它的关键词是delegate。

        比较重要的是参数返回值类型参数返回值类型加起来被称作签名),因为委托的签名必须要和将要绑定到委托上的方法的签名一致。

        也就是说DoWork的返回值类型是void,参数只有一个且类型是string,那么绑定到dowork(DoWork的实例)上的方法Work的返回值类型也得是void,参数也只有一个且是string。这样才能把Work绑定(或者是赋值)到dowork。

    4.委托的作用——将方法作为方法的参数

            以上三节应该能把委托理解了,那么委托的作用是啥?如同上面的例子,我为啥不直接调用Work呢?

        委托的做就是一句话:“将方法作为方法的参数”。这句话好多好多人解释过这里暂不多费笔墨,具体的例子看这位仁兄写的博文http://www.cnblogs.com/xiaofengfeng/archive/2011/12/02/2271732.html个人觉得文章中的例子还是非常好的,再有就是去MSDN上看例子。

    5.总结

        文章开头说的:委托就是一个方法其实并不十分准确,太片面,如同苹果就是苹果再怎么像桃子他也不是桃子。所以说委托就是委托,委托很像一个方法却不能直接片面的说他就是一个方法,但个人觉得用这么一句不准确的话来理解委托还是挺合适的。

    6.其他

        委托是事件的基础,只有深入了解了委托才能真正明白事件。委托还和多线程有关(异步委托的调用),还和Lambda表达式有关(匿名委托)而Lambda表达式又是LINQ的基础。所以吃透委托非常重要,本人自从接触委托到现在有半年时间了,还一直在不断参透中,也许文中也有不对的地方欢迎指正,共同进步。

    相关资源:python入门教程(PDF版)
    最新回复(0)