委托到底是什么?
来源:互联网 发布:复旦软件工程硕士 编辑:程序博客网 时间:2024/05/29 09:05
说到委托,大多数的编程人员可能都听说过,甚至用过,可是能把委托说明白,别人也能听明白的就不多了吧。这篇文章就由浅入深的介绍一下,委托到底是什么。
委托是面向对象的标志,面向对象来源于现实世界,当然委托在现实世界中也是有原型的,比如:“小明,帮我买包烟”。这就是现实中的委托:‘我’委托小明‘买饭’。
面向对象是如何实现的呢?先来看一下委托的定义:
public delegate void BuyFoodEventHandler();
public代表委托是公有的,可访问的;delegate是委托的关键字;void是委托的返回值类型;BuyFoodEventHandler是委托的名称,其中EventHandler微软公司规定的命名标准,方法名称加上后缀就是委托名称。
好了,这就是一个委托。我们把它和方法比较一下,它和方法的不同点就是:1委托需要关键字标识;2委托名称需要以EventHandler结尾;3委托没有方法体;4委托的返回值类型和委托方法的返回值类型一致。
接下来,我们使用代码来实现委托小明买烟这个过程。
<span style="font-size:18px;">public class Program { //定义委托 public delegate void BuyEventhandler(); public static void Main(string[] args) { //声明委托,委托的方法 BuyEventhandler myDelegate = new BuyEventhandler(XiaoMing.BuyCigarette); myDelegate += XiaoHong.BuyWater; //委托方法的实现 myDelegate(); Console.ReadKey(); } } public class XiaoMing { //买烟的方法 public static void BuyCigarette() { Console.WriteLine("吸烟有害健康!"); } }</span>BugTicketEventHandler myDelegate = new BugTicketEventHandler(MrZhang.BuyCigarate);这句话是委托的声明;括号内是委托的方法,这个方法一定要写,因为它属于委托的构造函数体,构造函数不能为空;
如果再让小红买一瓶水,如何实现呢?委托链可以解决这个问题,下面是委托链的介绍:
<span style="font-size:18px;">public class Program { //定义委托 public delegate void BuyEventhandler(); public static void Main(string[] args) { //声明委托,委托的方法 BuyEventhandler myDelegate = newBuyEventhandler(XiaoMing.BuyCigarette); myDelegate += XiaoHong.BuyWater; //委托方法的实现 myDelegate(); Console.ReadKey(); } } public classXiaoMing { //买烟的方法 public static void BuyCigarette() { Console.WriteLine("吸烟有害健康!"); } } public classXiaoHong { //买水的方法 public static void BuyWater() { Console.WriteLine("买个水都让我去,真懒!"); } }</span>
其实,我们只是在程序中加了 myDelegate += XiaoHong.BuyWater;
;这样就构成了委托链,实现了一个委托可以实现多个方法。
这里总结一下,委托其实就是方法的指针,可以把方法当做参数来使用,这样可以大大的增加程序的灵活性和可扩展性。
0 0
- c#委托到底是什么
- 委托到底是什么?
- 到底是什么
- 委托是什么
- 委托、事件和回调函数这3者之间到底是什么关系
- 委托、事件和回调函数这3者之间到底是什么关系
- FormBean到底是什么?
- [乱七八糟]Flex到底是什么?
- 爱情到底是什么
- SQA到底是什么?
- Spring到底是什么?- -
- J2EE到底是什么?
- web2.0到底是什么?
- BREW到底是什么?
- 编程到底是什么?
- SOA到底是什么?
- 敏捷到底是什么?
- Web service到底是什么
- python的学习之旅---开始篇(二)
- 梦一场
- Java工具及技巧篇
- 1.2.3 Name That Number
- Intent和PendingIntent的区别
- 委托到底是什么?
- wp8.1 Launcher 跳转页面
- 2015年240个数据库引擎排名参考
- zoj 2060 Fibonacci Again
- 小波分析和尺度函数(上)
- 谈谈对Spring IOC的理解
- Windows+Git+TortoiseGit+COPSSH 安装图文教程
- HDU-幂次方取尾数
- Openmp补遗之同步