C#的委托
之前本人一直在写一些相对比较基础的C#代码,现在做了一段时间项目了,遇到更麻烦的问题,比如今天要讨论的委托和事件,这个算是C#进阶篇的内容吧。现在自己就把这些天所学习的和自己所理解的和大家分享。有错请指正。
委托
顾名思义,委托就类似于中介,你建立它后,它一直在那儿,然后你可以让它去做不同的事,本质来说委托就是一个用来做事的工具。但是需要注意的是不是所有的事都能让委托去做,这些事要有相同的特征,比如和委托有相同的参数。好啦,咱们还是Demo说话吧
新建一个控制台项目

然后我们首先在项目定义一个委托,其实委托也算得上是一个类,属于引用类型(iint 等属于值类型,存储空间为堆栈,引用类型存储空间为堆),所以我们处理委托的时候可以直接把它像类一样处理,只是声明的时候不同的一点就是,要写出参数。

接着我们新建一个方法,这个方法就是我们需要这个委托,也就是这个中介去做的事。注意我们要让这个方法的参数类型和个数与委托一致,因为你不能让一个卖房子的中介去帮你干买车的事,对吧!

最后我们就来用委托吧,前面我有说过委托几乎类似一个类,我们要使用委托就得实例化了,并且我们这个时候得告诉它我们需要这个中介做什么事了。

注意一下此时传的参数是方法,而不是平时的什么int double类型。这也是委托的精髓所在。然后可以看到代码里面我随后就使用了委托,给handler传入了一个
int类型的参数,因为我们之前定义委托的时候就指定了需要一个参数,类型为int。
现在咱们来看看最后输出的结果吧,验证一下!!!

现在我们算是了解了最基础的委托,接着我们还是来看看多路广播委托,其实也就是让这个中介一次帮我们做多个事情。要是不能一次做多个事,我们要这个中介干嘛,还不如自己直接把这件事做了。
我们先添加两个事情吧。

我们现在再告诉中介也要做这两件事

我们用+=的方式来给他添加需要做的事,这个时候委托的内部有一个链表,可以不断地添加和删除要做的事(删除为-=),类似于list的操作。
现在我们来看一下运行结果吧

现在我们来总结一下委托吧
委托主要分为三步:
一:定义一个委托
二:需要做的事情
三:把事情通过参数形式传给委托
最后就是使用委托啦!!!
PS:今天由于时间不多,只能暂时简单写写委托,大家要更深入了解委托更细节的东西的话,可以去园子里的其他博客看看,有很多优秀的帖子。
下次我也会接着和大家分享一下在委托的基础上,我对于事件的理解。
C#的委托的更多相关文章
- C#中的委托解析
谈及到C#的基本特性,“委托”是不得不去了解和深入分析的一个特性.对于大多数刚入门的程序员谈到“委托”时,都会想到“将方法作为方法的参数进行传递”,很多时候都只是知道简单的定义,主要是因为“委托”在理 ...
- 深刻理解:C#中的委托、事件
C#中的事件还真是有点绕啊,以前用JavaScript的我,理解起来还真是废了好大劲!刚开始还真有点想不明白为什么这么绕,想想和JS的区别,最后终于恍然大悟! C#中事件绕的根本原因: C#的方法,它 ...
- c# 三种常见的委托
参考 <编写高质量代码:改善C#程序的157个建议> , 尽量使用FCL中的委托声明. FCL: FrameWork Class Library 三种常用:Action.Func.Pre ...
- C# 中的委托和事件
觉得这篇文章写的非常好,大神之作,由简入繁,对我这种初学者来说帮忙很大,特此留存下. 摘自:http://tracefact.net/CSharp-Programming/Delegates-and- ...
- C#中的委托与事件并存的理由
更多资源:http://denghejun.github.io 问题 有了委托为什么还要有事件? 理论上,事件能完成的事情委托完全可以胜任,但是我们思考的这一方面是功能性,我们必须从他们各自的特点分析 ...
- Objective-C中的委托(代理)模式
我个人更喜欢把委托(Delegate)模式称为代理(Proxy)模式.还是那句话,第一次接触代理模式是在Java中接触的,在Java中实现代理模式和接口是少不了的.当时学习Spring的时候用到了接口 ...
- C# 中的委托和事件(转)
引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去 ...
- C# 中的委托和事件(转载)
引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去 ...
- C# 委托和事件(一):最简单的委托和事件
C#的事件基于委托,所以先说委托. 一切脱离实际场景的抽象概念新手看上去就像是在扯犊子,不错,我就是个新手.所以我需要一个实际的场景. 明天刚好考试(商务英语),考试上有两个角色(class):老师( ...
随机推荐
- C#中如何给Excel添加水印
我们知道Microsoft Excel并没有内置的功能直接给Excel表添加水印,但是其实我们可以用其他变通的方式来解决此问题,如通过添加页眉图片或艺术字的方法来模仿水印的外观.所以在这篇文章中,我将 ...
- C#泛型详解(转)
初步理解泛型: http://www.cnblogs.com/wilber2013/p/4291435.html 泛型中的类型约束和类型推断 http://www.cnblogs.com/wilber ...
- java中易错点(一)
由于replaceAll方法的第一个参数是一个正则表达式,而"."在正则表达式中表示任何字符,所以会把前面字符串的所有字符都替换成"/".如果想替换的只是&qu ...
- Android Studio-—使用OpenCV的配置方法和demo以及开发过程中遇到的问题解决
前提: 1.安装Android Studio(过程略) 2.官网下载OpenCV for Android 网址:http:opencv.org/downloads.html 我下载的是下图的版本 3. ...
- 企业IT管理员IE11升级指南【17】—— F12 开发者工具
企业IT管理员IE11升级指南 系列: [1]—— Internet Explorer 11增强保护模式 (EPM) 介绍 [2]—— Internet Explorer 11 对Adobe Flas ...
- Unity3D和Egret3D的基情
Unity3D依靠多平台发布这个核心特点,目前如日中天,屌丝引擎之王绝无来者.Egret白鹭引擎,也着实在微信上刷了一屏又一屏.这二者似乎风马牛不相及,但是这个无处不搞基的年代,让一切皆有可能. U3 ...
- 压缩javascript文件方法
写在前面的话:正式部署前端的时候,javascript文件一般需要压缩,并生成相应的sourcemap文件,对于一些小型的项目开发,这里提供一个简单的办法. ======正文开始====== 1.下载 ...
- Vue插件开发入门
相对组件来说,Vue 的插件开发受到的关注要少一点.但是插件的功能是十分强大的,能够完成许多 Vue 框架本身不具备的功能. 大家一般习惯直接调用现成的插件,比如官方推荐的 vue-router.vu ...
- Spring学习记录(十三)---基于xml文件配置AOP
上一篇讲了用注解配置AOP,现在讲用xml怎么配置AOP 其实逻辑是一样的,只是用xml的方法,要把这种逻辑写出来,告诉spring框架去执行. 例子:这里的例子和上一篇的例子一样.换成xml方式 / ...
- springmvc 配置01
springmvc请求流程与struts比较 1.添加包 com.springsource.org.aopalliance-1.0.0.jarcom.springsource.org.apache ...