C#委托
2015-12-27 19:49
260 查看
故事发展起因
时间:2015-12-27日 地点:办公室 人物:孔总、小秘事件:孔总要到IT大佬大会进行发言,就“委托”小秘代写发言稿
分析
孔总不需要知道小秘在什么地方、如何写好发言稿,只需要接受到发言稿就行,但是孔总虽然不需要写发言稿,但是写个委托还是会的。下面是孔总写的发言稿委托(title是标题,wordcount是字数)<span style="font-family:KaiTi_GB2312;font-size:18px;">public delegate void WriteScript(string title, int wordcount);</span>
定义的委托是一个密封类,孔总和小秘关注的就是方法的返回值以及方法的参数了。
下面是小秘根据孔总的委托要求写出了具体的文稿:
<span style="font-family:KaiTi_GB2312;">//定义一个秘书类Secretary,包含按领导要求写的文稿(script1) class Secretary {//文稿就是具体方法 public static void script1(string title,int wordcount) { Console.WriteLine("大会主题是:"+title); } }</span>
小秘的文稿写好了,如何交给孔总呢,孔总又如何读文稿呢?
<span style="font-family:KaiTi_GB2312;font-size:18px;">//定义一个领导类</span>
class leader { <span style="white-space:pre"> </span>public delegate void WriteScript(string title,int wordcount);//定义委托 <span style="white-space:pre"> </span>static void Main() <span style="white-space:pre"> </span>{ <span style="white-space:pre"> </span>//具体方法script1和委托对象之间建立关联:文稿交给领导 <span style="white-space:pre"> </span>WriteScript obj=new WriteScript(Secretary.script1);//创建委托对象 <span style="white-space:pre"> </span>//触发发言事件——调用具体方法处理:领导读文稿 <span style="white-space:pre"> </span>obj.Invoke("论IT发展前景,250")//委托对象用Invoke调用具体方法——领导讲话 <span style="white-space:pre"> </span>obj("IT发展前景很好",250);//可省略invoke,像调用方法一样调用委托对象 <span style="white-space:pre"> </span>} }</span>
程序运行结果
文稿script1作为构造函数的参数传给对象obj,然后用invoke方法间接调用script1.
如果孔总一天要参加多个会议,不能只有一个发言稿。这也难不倒小秘,小秘已经多写了些文稿(script2等),用”+=“操作符赋给obj即可:
obj+=Secretary.script2;
如果孔总认为某篇发言稿不好,就用”-=“除掉他。
多个方法可赋给同一个委托也叫将多个方法绑定到同一个委托。当调用这个委托的时候,将以此调用所绑定的方法。
小结
使用委托使程序员可以将方法引用封装在委托对象内。然后可以将该委托对象传递给可调用所引用方法的代码,而不必在编译时知道将调用哪个方法。委托是面向对象,而且是类型安全的。委托带来程序扩展性的提升。相关文章推荐
- C#多态
- C# webBrowser控件使用心得
- C#WebBrowser控件使用教程与技巧收集--苏飞收集
- C#视频总结
- C#-字符数组(笔记)
- 【C#学习】——接口例子
- C#面向对象设计模式纵横谈——6.Prototype 原型模式(创建型模式)
- C#学习笔记007-字符串练习
- C#中Console.WriteLine()的用法
- C#-循环滚动字幕,timer,从左至右,从右至左,暂停---ShinePans
- 深入理解c#中的const 和readonly的区别滴呀;
- CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探
- 使用C#实现读取系统配置文件的代码实例讲解
- c# 类函数static是什么意思?
- C#实现MD5加密
- C#随机验证码
- C# 读取ini配置文件
- C# 获取CPU序列号、网卡MAC地址、硬盘序列号封装类,用于软件绑定电脑
- C#中的接口
- C#趣味程序---个位数为6,且能被3整出的五位数