关闭

入门 委托、事件和回调函数

发表于:2013-2-17 09:28

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:汤长海    来源:51Testing软件测试网采编

  在做电话拨号项目中,引用了activex控件,实现中用到了委托、回调,借此机会学习下。

  编程中,事件驱动再常见不过。提到事件,就会想起委托,因为事件是在委托基础上实现的。提到委托,也会想起回调函数,因为回调函数是委托更深层次的应用。

  委托

  委托是把你将要做的事情交给其他人去做。而怎么知道是哪个人去做呢?当然是要知道名字!而为了区别名字一样的不同人,因此,需要描述一个特征,也就是方法签名。

  delegate是C#中的一种类型,实际上是一个能够持有对某个方法的引用的类。与其它的类不同,delegate类能够拥有一个签名(signature),并且它只能持有与它的签名相匹配的方法的引用。所实现的功能与C/C++中的函数指针十分相似。

  实现一个C# delegate是很简单的,通过以下3个步骤即可实现一个delegate:

  1、声明一个delegate对象,它应当与你想要传递的方法具有相同的参数和返回值类型。

  2、创建delegate对象,并将你想要传递的函数作为参数传入。

  3、在要实现异步调用的地方,通过上一步创建的对象来调用方法。

  下面是一个简单的例子:

<SPAN style="FONT-SIZE: 18px">using System; 
public class MyDelegateTest 

// 步骤1,声明delegate对象 
public delegate void MyDelegate(string name);
 
// 这是我们欲传递的方法,它与MyDelegate具有相同的参数和返回值类型 
public static void MyDelegateFunc(string name)

Console.WriteLine("Hello, {0}", name); 

 
public static void Main() 

// 步骤2,创建delegate对象 
MyDelegate md = new MyDelegate(MyDelegateTest.MyDelegateFunc);
 
// 步骤3,调用delegate 
md("sma11");

} </SPAN>

  输出结果是:Hello,sma11

  事件

  在某件事情发生时,一个对象可以通过事件通知另一个对象。比如,前台完成了前台界面,他通知你,可以把前台和你开发的程序整合了。这就是一个事件。可以看出事件是在一个时间节点去触发另外一件事情,而另外一件事情怎么去做,他不会关心。就事件来说,关键点就是什么时候,让谁去做。

  C#中的事件处理实际上是一种具有特殊签名的delegate,象下面这个样子:

  public delegate void MyEventHandler(object sender, MyEventArgs e);

  其中的两个参数,sender代表事件发送者,e是事件参数类。MyEventArgs类用来包含与事件相关的数据,所有的事件参数类都必须从System.EventArgs类派生。当然,如果你的事件不含参数,那么可以直接用System.EventArgs类作为参数。

31/3123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号