一句话说明白什么是委托

简介: 委托就是一个方法,一个没有代码块并且能作为参数的方法。 (注:这里的委托是指委托对象而不是委托类,因为委托的类与实例化的对象都被称为“委托”)     其实直接说委托就是一个方法并不准确,但这样也不无道理且更容易理解,下面细细道来。 1.为什么说委托就是一个方法? 先看代码: using System;namespace 委托demo控制台{        class

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

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

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

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的基础。所以吃透委托非常重要,本人自从接触委托到现在有半年时间了,还一直在不断参透中,也许文中也有不对的地方欢迎指正,共同进步。


















目录
相关文章
|
3月前
|
存储 C# C++
C#进阶-委托(Delegrate)
类似于 C 或 C++ 中函数的指针,委托是C#的函数指针,是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。本篇文章我们将讲解C#里委托的类型及如何使用。委托的语法第一次接触难免感到陌生,最好的学习方式就是在项目中多去使用,相信会有很多感悟。
26 0
|
7月前
|
C# Windows
C#OOP之十一 委托和事件
C#OOP之十一 委托和事件
36 0
C#编程:如何理解委托-2
C#编程:如何理解委托-2
|
设计模式 前端开发 C#
C#开发中使用委托的作用和好处
先看概念,什么是委托? 从程序的角度来讲:你就可以把委托看成是用来执行方法(函数)的一个“指针” 通俗的说就是:通过委托,我们可以把方法当成参数传递。 这里我举个例子:“设想,如果我们写了一个厨师做菜的方法,里面有拿菜、切菜、配菜、炒菜四个步骤,但编写此方法代码的人想让配菜这个环节让调用方法的人来实现,换句话说,就是想把方法作为参数来传递,那么怎么来实现呢? 方法1:使用接口,这里不是我们讨论的。
7247 0
C#编程:如何理解委托
C#编程:如何理解委托
155 0
艾伟_转载:把委托说透(4):委托与设计模式
委托与很多设计模式都有着千丝万缕的联系,在前面的随笔中已经介绍了委托与策略模式的联系,本节主要来讨论委托与其他两个模式:观察者模式和模板方法模式。 委托与观察者模式 在.NET中,很多设计模式得到了广泛应用,如foreach关键字实现了迭代器模式。
972 0
|
监控 C#
艾伟_转载:把委托说透(1):开始委托之旅 委托与接口
委托,本是一个非常基础的.NET概念,但前一阵子在园子里却引起轩然大波。先是Michael Tao的随笔让人们将委托的写法与茴香豆联系到了一起,接着老赵又用一系列文章分析委托写法的演变,并告诫“嘲笑孔乙己的朋友们,你们在一味鄙视“茴”的四种写法的同时,说不定也失去了一个了解中国传统文化的机会呢!”。
980 0
|
.NET
艾伟_转载:把委托说透(2):深入理解委托
在上一篇随笔中我们通过示例逐步引入了委托,并比较了委托和接口。本文将重点剖析委托的实质。 委托在本质上仍然是一个类,我们用delegate关键字声明的所有委托都继承自System.MulticastDelegate。
1079 0
抛开书本谈 委托,为什么需要委托,它成就了什么?
博文技术有限,重在学习交流,有错误大家指正。 思路: 传统的方法调用------>委托的出现解决了什么问题---->委托的绑定方法----->总结   1.传统的方法调用 View Code 缺点:100个方法就要调用100次,如果每个人 对方法的需求不一样,就不能很好的处理了。
598 0