C#中的委托是什么?

王朝学院·作者佚名  2016-05-21
窄屏简体版  字體: 小  |  中  |  大  |  超大  

C#中的委托是什么?概述

委托类似C++中的函数指针,但是又有所不同。在C++中,函数指针不是类型安全的,它指向的是内存中的某一个位置,我们无法判断这个指针实际指向什么,对于参数和返回类型就更难以知晓。而.NET的委托则完全不同,它是类型安全的类,我们可以清晰的知道委托定义的返回类型和参数类型。它不仅可以包含方法的引用,还可以包含多个方法的引用。这就是委托,.寻址方法的.NET版本。

理解委托

在实际的开发过程中,有时某个方法执行的操作并不是针对数据进行的,而是针对另一个方法,但是这个方法在编译时又无法得知,只能在运行时才知道。如果是针对数据做操作,只需将数据作为方法的参数传入即可,那么针对方法做操作,很明显将方法作为参数传入即可,听起来的确很奇怪,但是需要先接受这个现实,然后从使用中去体会它的含义。下面举一个例子(请原谅我的英语 ,my english is poor!),这样一个场景:媒婆给菇凉或者小伙介绍对象,如果是对象是男的,菇凉就说出她的联系方式,如果是女的,小伙就说出他的联系方式(PS:我们这里都是正常的性取向)。

看一下代码图

在命名空间里,定义一个委托,和类是平级的

public delegate string GetTelphone();//用来得到联系方式的。

概述中提到,委托可以定义返回类型和参数类型,那么这个委托的返回类型就是string,无参的。

继续。。。。

媒婆类:

/// <summary> /// 媒婆 /// </summary> class Meipo { public string Sex { get; set; } public void GetTel(GetTelphone getTelphone) { Console.WriteLine(getTelphone.Invoke()); } }

可以看到,GetTel方法的参数是一个委托类型的,和一般的基本类型和常见引用类型引用方式一样使用。然后再方法体执行委托方法,输出结果。

菇凉类:

/// <summary> /// 菇凉 /// </summary> class Girl { public string GetGirlTel() { return "得到菇凉的电话"; } }

小伙类:

/// <summary> /// 男屌丝 /// </summary> class DiaoSi { public string GetBoyTel() { return "得到男屌丝的电话"; } }

最后上测试类

static void Main(string[] args) { var redMun = new MeiPo {Sex = "男"}; var del= new GetTelphone(new Girl().GetGirlTel); if(redMun.Sex=="女") del = new GetTelphone(new DiaoSi().GetBoyTel); redMun.GetTel(del); Console.ReadKey(); }

执行步骤:

1、创建媒婆对象,媒婆介绍一个sex="男",

2、创建委托对象,委托是一个类,所以用new来实例化。委托即指方法的引用,所在初始化时传入指向的方法引用new Girl().GetGrilTel

3、如果媒婆介绍的是sex="女",那么委托指向另一个方法

4、媒婆对象调用GetTel得到联系方式

总结:委托内容比较复杂,鉴于笔者水平有限,理解有限,这里先解释这么多,以后如果理解更深后,继续分享。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航