C#委托

原创 2015年12月27日 19:49:16

故事发展起因

    时间: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# 委托及各种写法 委托是嘛? 委托是一个类型安全的对象,它指向程序中另一个以后会被调用的方法(或多个方法)。通俗的说,委托是一个可以引用方法的对象,当创建一个委托,也就创建一个引用方法的对象,进...

C#中被委托的方法必须是静态的吗?

静态方法与实例方法的区别: 静态方法都是通过关键字static来定义的,静态方法不需要实例这个对象就可以通过类名来访问这个对象。在静态方法中不能直接访问类中的非静态成员。而用实例方法则需要通过具体的...

不理解C#的枚举,委托和事件.请求高手给个通俗易懂的例子。就是有代码和对代码的详细解释。十分谢谢

枚举相对来说还是比较好理解的。这就好像你的一只手一样,你的手掌就好比枚举的声明,而你的每一个手指和你的手掌组成了你整个手。就好像这样的声明: public enum Hand{ 食指, 大拇指...
  • ytbhhws
  • ytbhhws
  • 2014年12月18日 15:34
  • 1028

C#中的Action<T>、Func<T>委托和Lambda表达式

使用Action、Func和Lambda表达式 在.NET在,我们经常使用委托,委托的作用不必多说,在.NET 2.0之前,我们在使用委托之前,得自定义一个委托类型,再使用这个自定义的委托类型定...

C# 通过委托控制进度条以及多线程更新控件

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin...

[ASP.NET MVC 大牛之路]01 - C#高级知识点概要(1) - 委托和事件

要成为大牛,必然要有扎实的基本功,不然时间再长项目再多也很难有大的提升。本系列讲的C# 高级知识点,是非常值得去撑握的,不仅可以让你写代码时游刃有余,而且去研究和学习一些开源项目时,也不会显得那么吃力...

[C#]委托和事件(详细讲解)

引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易。它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没...

【UNITY3D 游戏开发之七】C# 中的委托、事件、匿名函数、Lambda 表达式

Unity3d 开发中,常用的莫过于委托和事件了,所以转载一篇相关文章,写的比较详细的,这里分享一下。      对于匿名函数以及Lambda表达式也是非常常用的,这里就直接分享链接,童鞋们自行...
  • ourpush
  • ourpush
  • 2016年10月16日 10:40
  • 279

终于会用c#中的delegate(委托)和event(事件)了

一、开篇忏悔 对自己最拿手的编程语言C#,我想对你说声对不起,因为我到现在为止才明白c#中的delegate和event是怎么用的,惭愧那。好了,那今天就趁月黑风高的夜晚简单来谈谈delegate和...
  • Sayesan
  • Sayesan
  • 2016年03月03日 13:35
  • 459

在C#中使用代理(即委托)的方式触发事件(观察者模式)

事件(event)是一个非常重要的概念,我们的程序时刻都在触发和接收着各种事件:鼠标点击事件,键盘事件,以及处理操作系统的各种事件。所谓事件就是由某个对象发出的消息。比如用户按下了某个按钮,某个文件发...
  • Baple
  • Baple
  • 2014年03月11日 19:11
  • 1682
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#委托
举报原因:
原因补充:

(最多只允许输入30个字)