lark.com

火鸟乐园——生活在.net时代
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

关于回调函数

Posted on 2005-12-15 15:45  火鸟  阅读(303)  评论(0编辑  收藏  举报
我们在设计软件系统架构的时候,经常需要用到回调函数。例如,我们设计了一个库,封装了一些接口。客户程序调用这些接口,我们的库执行一系列业务逻辑,并在调用结束的时候通知客户程序。
为了便于理解回调函数,我设计以下简单的例子:

#include "stdafx.h"


// 函数指针
typedef int (*MYCALLBACK) (int a, int b); 

// 回调函数调用函数
// 可以看作是DLL提供的接口
void testCallback (MYCALLBACK fun)
{
    fun(
1,2);// 调用回调函数
}


// 回调函数
int callback(int a, int b)
{
    printf (
"我被回调了!\n");
    
return a + b;
}


int callback2(int a, int b)
{
    printf (
"我也被回调了!\n");
    
return a * b;
}


int _tmain(int argc, _TCHAR* argv[])
{
    
// 调用接口函数
    
// 可以根据需要调用不同的回调函数
    testCallback (callback);
    testCallback (callback2);
    
return 0;
}
在.net中,引入了“委托”的概念来代替回调函数的功能。这个概念很形象,客户程序“委托”一个中间人把处理结果告诉自己。另外,委托是完全面向对象的,更容易理解。