C++和C#中的回调函数
来源:互联网 发布:python升级到2.7 pip 编辑:程序博客网 时间:2024/06/05 06:29
什么是回调?有人这么说:“发布者说,当我遇到什么事的时候,我就通知大家,有需要通知的就把电话号码给我,等那件事发生时,我就打电话通知大家;”。
而在这篇文章中则详细介绍了什么是回调函数以及回调函数的机制: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); }};// applicationint 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中的回调函数
- C中的回调函数
- C++和C#中的回调函数解析
- 浅析C#中的回调函数
- C# 调用C/C++回调函数
- 探讨C语言中的回调函数
- c语言中的回调函数
- 探讨C语言中的回调函数
- C/C++中的回调函数
- C语言中的回调函数
- C中的回调函数诠释
- 探讨C语言中的回调函数
- 探讨C语言中的回调函数
- C语言中的回调函数
- 探讨C语言中的回调函数
- u-boot-2011.03移植系列专题汇总
- css:级连样式表
- 有关C++中的 placement new
- GDAL综合整理--9:其它
- MATLAb-----7--------如何动态显示鼠标的坐标值和图像像素值
- C++和C#中的回调函数
- OPENJUDGE 2815 城堡问题
- bit位的设置和清零
- php根据IP获取地址位置,并在谷歌地图上显示出来
- Qt之相关error总结
- poj 2019 Cornfields
- 解决requestFeature() must be called before adding content错误
- 空白符,不仅仅只有空格
- 正则表达式说明表
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
行政传唤
蓬佩奥被传唤
派出所电话传唤严重吗
派出所传唤可以不去吗
口头传唤的条件及程序
公安传唤可以拒绝吗
口头传唤的法律依据
法院传唤不去有什么后果
刑事案件传唤
经侦大队的传唤方式
派出所电话传唤就是立案了吗
经侦大队传唤不去会怎么样
传唤和拘传的区别
刑事案件传唤时间
异地传唤的规定
刑事传唤需要通知家属吗
传唤的程序及时间
派出所传唤人的程序
传唤证是立案了吗
派出所传唤不去有什么后果
立案后是传唤还是抓人
传唤是什么意思
传唤的法律依据
辛东彬二审缓刑
取保候审多久传唤一次
信用卡立案是传唤还是抓人
淘宝主播欣怡被传唤
取保候审期间检察院传唤
取保候审检察院传唤啥意思
派出所打电话通知就是传唤吗
我是传奇
传奇boss
围棋传奇
白娘子传奇
传奇游
小兵传奇
星际传奇3
传奇gs
天云山传奇
楚留香传奇
我就是传奇