您的位置:首页 > 编程语言 > C#

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;

如果孔总认为某篇发言稿不好,就用”-=“除掉他。

多个方法可赋给同一个委托也叫将多个方法绑定到同一个委托。当调用这个委托的时候,将以此调用所绑定的方法。

小结

使用委托使程序员可以将方法引用封装在委托对象内。然后可以将该委托对象传递给可调用所引用方法的代码,而不必在编译时知道将调用哪个方法。委托是面向对象,而且是类型安全的。委托带来程序扩展性的提升。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: