C#委托

故事发展起因

    时间: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;

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

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

小结

    使用委托使程序员可以将方法引用封装在委托对象内。然后可以将该委托对象传递给可调用所引用方法的代码,而不必在编译时知道将调用哪个方法。委托是面向对象,而且是类型安全的。委托带来程序扩展性的提升。




阅读更多

扫码向博主提问

孔唯妍

非学,无以致疑;非问,无以广识
去开通我的Chat快问
上一篇抽象类和接口
下一篇设计模式五原则
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭