一句话说明白什么是委托

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

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

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

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

时间: 2024-07-29 00:28:40

一句话说明白什么是委托的相关文章

[vb.net] <原创教程> 关于委托的定义和作用问题

问题描述 我发新现在很多人不明白什么是委托,委托是干什么的等等疑问.可笑的是真正弄明白委托的意义和作用的人却一盘沙茫.一大堆错误答案来忽悠的人太多了.这时候本大魔王愿意伸手慈悲,阿门~~本大魔王赐给答案之前要求一大堆自称大神的人都来挑战知识吧!我相信这个考试有一个人容易过关,所以,决定中出答案赐赏100分大魔王金币!没一个人中出答案就扔垃圾桶了.时间是7天内完成. 解决方案 解决方案二:从语言上来判断,lz幼年和青年时期遭遇过严重得创伤啊.解决方案三:不就是一个函数指针吗?至于让你这样子么?解决

浅析Visual C#事件处理机制(1)

visual 事件简介: 任何进行过图形用户界面开发的编程人员都会知道事件的概念.当用户在使用程序的时候,用户必然要和程序进行一定的交互.比如当用户点击窗体上的一个按钮后,程序就会产生该按钮被点击的事件,并通过相应的事件处理函数来响应用户的操作.这样用户的直观感觉就是程序执行了我要求的任务了.当然,事件并不一定是在和用户交互的情况下才会产生的,系统的内部也会产生一些事件并请求处理的,比如时钟事件就是一个很好例子.不过要介绍C#中的事件处理机制(扩展到更广的范围便是整个.Net框架),我们首先得明

服务器集群负载均衡(F5,LVS,DNS,CDN)区别以及选型

  ======================================= F5全称: F5-BIG-IP-GTM 全球流量管理器. 是一家叫F5 Networks的公司开发的四~七层交换机,软硬件捆绑. 据说最初用BSD系统,现在是LINUX;硬件是Intel的PC架构,再加周边的网络和专用加速设备. 当然要提提售价, 都是几十万RMB的身价. 这宝贝是用于对流量和内容进行管理分配的设备,也就是负载均衡. 从名字就能看出来:BIG-IP. 外部看来是一个IP,内部可却是几十台应用服务器

无线鼠标怎么用使用教程

前段时间笔者以前笔记本原配的USB鼠标突然出现故障,鼠标变的越来越不灵敏,于是在电脑城转了一圈,发现有不少无线鼠标价格也非常实惠,也想来试试无线鼠标来玩玩,一般我们装电脑笔记本一般选无线鼠标也比较方面,但我们建议游戏玩家选鼠标最好还是有线的玩的会更好些. 大家看能看完第一段都不知道笔者要表达的什么,其实开始觉得没必要写本篇文章,因为无线鼠标的使用非常简单,并不像一些新手朋友想的那样,要设置什么什么,今天刚好有新手朋友问到了这个问题,说无线鼠标怎么用?要怎么设置?其实这个是新手朋友们多滤了,无线鼠

C#中的委托,匿名方法和Lambda表达式

简介 在.NET中,委托,匿名方法和Lambda表达式很容易发生混淆.我想下面的代码能证实这点.下面哪一个First会被编译?哪一个会返回我们需要的结果?即Customer.ID=5.答案是6个First不仅被编译,并都获得正确答案,且他们的结果一样.如果你对此感到困惑,那么请继续看这篇文章. class Customer { public int ID { get; set; } public static bool Test(Customer x) { return x.ID == 5; }

对网站运营的看法

普通的网站运营职位的工作内容虽然还没有深入的涉及到管理这块,但是实际上在很多网站及公司的地位都得不到确认.不少互联网公司都是以技术为重,忽略网站运营这个位置.而传统行业触网深度不大,对网站运营更加没有深入的考虑.但随着互联网应用越来越广泛,对于网站运营.互联网产品经理等职位的需求会越来越大,扛在网站运营职位人员身上的责任也将会越来越大. 网站运营要有统筹协调 由于网站运营的职能特点,需要对整个网站进行维护和整理.但不代表网站运营是全能的,很多运营人员不会代码,对程序的认知顶多是简单修改.网站运营

定位在先,战略在后

■文/董继业 定位概念 1969年,艾尔·里斯和杰克·特劳特在美国<广告时代>和<工业营销>上发表了一系列文章,首次提出"定位"概念.他们认为,面对一个传播过度和产品越来越同质化的时代,要赢得消费者,企业有必要让自己的产品独树一帜,在消费者心中形成独特的地位."定位就是如何在预期顾客的头脑里独树一帜.""定位要从一个产品开始.那产品可能是一种商品.一项服务.一个机构甚至是一个人,也许就是你自己.但是,定位不是你对产品要做的事.定位是

王老吉重新亮剑弃凉茶改卖矿泉水

天地之间,周而复始.近日,宇宙似乎向人们发出一种信号--无论是南半球,还是北半球,天气像一个火炉一样散发出火热的能量,这可喜了繁荣了品类繁多的饮品市场,大超市里小商场旁边的冰箱里,一瓶瓶的饮料宛如灌溉干旱田地里的稻草的浇水一样注入人们的口中.而一直火红大江南北的王老吉的背后母公司加多宝集团也顺势推出中国最高端饮用水--昆仑山天然雪山矿泉水,是否也能扮演火热天气里解渴的"救星",融化人们的心从而凉爽每一天呢?! 其实,王老吉成功一直令人注目与鼓舞的,同样,昆仑山天然雪山矿泉水如今新&qu

手机广告让人很难一句说清楚

最近一个朋友和我聊起了http://www.aliyun.com/zixun/aggregation/35664.html">手机广告,他建议手机广告不能做,目前各路都在开刀手机广告,弄不好惹火烧身.唯一的办法就是撤呼--!只要谈及手机广告,垃圾短信,骚扰信息都会与之为伍.很难一句话说明白了,其原因就是你已经进了浑水当中,想洗清很难了.即使天不黑,你也要闭眼. 仔细想来,一句话是说不清楚了.本来是可以说清楚的,但是现在说不清了.首先手机广告面临狼来了,然后就出现过家家.当喊一声狼来了,一个