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):老师( ...
随机推荐
- 搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 (1)
搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 原文地址(英文):http://www.networkcomms.net/creating ...
- git命令行操作
从本地上传代码到仓库(假设已经建好仓库): 1.初始化: git init 2.将所有文件加入缓存区: git add * 3.提交当前工作空间的修改内容: git commit -m 'commit ...
- Atitit.你这些项目不都是模板吗?不是原创 集成和整合的方式大总结
Atitit.你这些项目不都是模板吗?不是原创 集成和整合的方式大总结 1.1. 乔布斯的名言:创新即整合(Creativity is just connecting things).1 1.2. ...
- 支付宝web支付
过程 1. 用户下单 2. 商户后台产生订单 3. 请求支付宝web支付页面(将订单信息返回给用户---放在form里面---隐藏起来-----并通过脚本自动提交此form到支付宝web支付页) 4. ...
- 【腾讯Bugly干货分享】WebVR如此近-three.js的WebVR示例解析
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57c7ff1689a6c9121b1adb16 作者:苏晏烨 关于WebVR 最 ...
- Nova PhoneGap框架 第一章 前言
Nova PhoneGap Framework诞生于2012年11月,从第一个版本的发布到现在,这个框架经历了多个项目的考验.一直以来我们也持续更新这个框架,使其不断完善.到现在,这个框架已比较稳定了 ...
- [转载]:STM32为什么必须先配置时钟再配置GPIO
转载来源 :http://blog.csdn.net/fushiqianxun/article/details/7926442 [原创]:我来添两句,就是很多同学(包括我)之前搞低端单片机,到了stm ...
- JavaScript dom 标签属性
节点: 平时开发中常用的节点是: 元素节点:nodeType值是 1 --> <a>,<p>...... 属性节点:nodeType值是 2 --> t ...
- NLog在Asp.Net MVC的实战应用
Asp.Net MVC FilterAttribute特性.读取xml反序列化.NLog实战系列文章 首先新建一个MVC project. 一.NLog的配置. 作者:Jarosław Kowalsk ...
- JS原生第三篇 (帅哥)
1.1 数 组 1. 数组 看电影 电影院 座位 大的变量 里面可以放很多的值 var arr = [1,3,57]; var ar = new Array(); ...