C++和C#中的回调函数
2012-04-12 21:15
239 查看
什么是回调?有人这么说:“发布者说,当我遇到什么事的时候,我就通知大家,有需要通知的就把电话号码给我,等那件事发生时,我就打电话通知大家;”。 而在这篇文章中则详细介绍了什么是回调函数以及回调函数的机制:http://shudingbo.spaces.live.com/blog/cns!C33400475B08F157!423.entry
1. 什么是回调函数
回调函数(callback Function),顾名思义,用于回调的函数。 回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数。回调函数是一个工作流的一部分,由工作流来决定函数的调用(回调)时机。回调函数包含下面几个特性: 属于工作流的一个部分;必须按照工作流指定的调用约定来申明(定义);
他的调用时机由工作流决定,回调函数的实现者不能直接调用回调函数来实现工作流的功能;
2. 回调机制
回调机制是一种常见的设计模型,他把工作流内的某个功能,按照约定的接口暴露给外部使用者,为外部使用者提供数据,或要求外部使用者提供数据。如上图所示,工作流提供了两个对外接口(获取参数、显示结果),以回调函数的形式实现。“获取参数”回调函数,需要工作流使用者设定工作流计算需要的参数。
“显示结果”回调函数,提供计算结果给工作流使用者。
3. 回调机制应用
使用回调机制,可以为工作流实现扩展。 可以把工作流中需要用户干预的,或需要提供给用户的数据以回调的模式提供给用户。而用户不需要知道整个工作的流程,只需知道回调函数的说明就可以使用工作流模块提供的功能,这对信息的隐藏也是有作用的。4. 回调机制的实现形式
回调函数虚拟函数
事件
example1: 以虚函数实现回调机制语言C++)
class CWorkFlow { void init() { _a = 0; _b = 0; } int _a; int _b; public: void Start() { // 初始化 init(); // 调用处理数据 Handle( a, b ); // 报告结果 Report( a, b ); } virtual void Handle( int &a, int &b ) = 0; virtual void Report( int iRet) = 0; }; class CMain : public CWorkFlow { public: void Handle( int &a, int &b ) { a = a + b/2; } void Report( int iRet) { printf("iRet = %d\n", iRet); } }; // application int main() { CMain main; main.Start(); }
example2::一个简单的函数回调的例子(语言C#)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Text; using System.Windows.Forms; namespace CallBack { public partial class Form1 : Form { public Form1() { InitializeComponent(); Center center = new Center(); center.receive(message); } public void message(string msg) { MessageBox.Show(msg); } } public class Center { public delegate void CallBackDelegate(string msg); public void receive(CallBackDelegate callback) { callback("中心收到"); } } }
从上面代码可以看出,回调函数是把方法当做参数传递给另一个类,另一个类在接收后再返回给调用类,最后由调用类完成回调函数的具体实现。
在代码上,回调函数的委托运用和普通委托最大的不同点是center类中receive方法的参数类型是委托类,通过委托类实现与message方法的具体关联。
所以要想很好的掌握回调函数的技巧,还是必须先要理解委托的基本原理和概念。
相关文章推荐
- c# 调用c++带有回调函数方法的实现
- C# 调用 C++ 回调函数
- C#中用委托实现C++的回调函数
- Unity 之 C# 利用回调函数实现C++匿名函数
- Unity 之 C# 利用回调函数实现C++匿名函数
- C# 调用C++回调函数
- c#调用c++回调函数。
- c#调用c++的回调函数
- c# 调用c++带有回调函数方法的实现
- C++调用C#注册的回调函数
- C#中用委托实现C++的回调函数
- C# 调用C/C++回调函数
- Unity 之 C# 利用回调函数实现C++匿名函数
- C#调用C++DLL,及回调函数、string参数传递的总结
- C#的委托vsC++的回调函数
- 关于C#中调用C++dll传递回调函数的问题
- c#调用c++带有回调函数方法的实现
- C#调用c++dll时,关于回调函数
- 关于C#中调用C++dll传递回调函数的问题
- C# 调用C/C++回调函数