详解什么是C#回调

开发 后端
什么是C#回调?有人这么说:“发布者说,当我遇到什么事的时候,我就通知大家,有需要通知的就把电话号码给我,等那件事发生时,我就打电话通知大家。”而在这篇文章中则详细介绍了什么是回调函数以及回调函数的机制

1.什么是回调函数

回调函数(callbackFunction),顾名思义,用于回调的函数。回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数。回调函数是一个工作流的一部分,由工作流来决定函数的调用(回调)时机。回调函数包含下面几个特性:

属于工作流的一个部分;

必须按照工作流指定的调用约定来申明(定义);

他的调用时机由工作流决定,回调函数的实现者不能直接调用回调函数来实现工作流的功能;

2.C#回调机制

C#回调机制是一种常见的设计模型,他把工作流内的某个功能,按照约定的接口暴露给外部使用者,为外部使用者提供数据,或要求外部使用者提供数据。

回调机制图

如上图所示,工作流提供了两个对外接口(获取参数、显示结果),以回调函数的形式实现。

“获取参数”回调函数,需要工作流使用者设定工作流计算需要的参数。

“显示结果”回调函数,提供计算结果给工作流使用者。

3.C#回调机制应用

使用回调机制,可以为工作流实现扩展。可以把工作流中需要用户干预的,或需要提供给用户的数据以回调的模式提供给用户。而用户不需要知道整个工作的流程,只需知道回调函数的说明就可以使用工作流模块提供的功能,这对信息的隐藏也是有作用的。

4.回调机制的实现形式

回调函数

虚拟函数

事件

example:以虚函数实现回调机制(有时间补充C#版本)

  1. Code  
  2. classCWorkFlow  
  3. {  
  4. voidinit()  
  5. {  
  6. _a=0;  
  7. _b=0;  
  8. }  
  9.  
  10. int_a;  
  11. int_b;  
  12. public:  
  13.  
  14. voidStart()  
  15. {  
  16. //初始化  
  17. init();  
  18. //调用处理数据  
  19. Handle(a,b);  
  20. //报告结果  
  21. Report(a,b);  
  22. }  
  23.  
  24. virtualvoidHandle(int&a,int&b)=0;  
  25. virtualvoidReport(intiRet)=0;  
  26. };  
  27.  
  28.  
  29. classCMain:  
  30. publicCWorkFlow  
  31. {  
  32. public:  
  33. voidHandle(int&a,int&b)  
  34. {  
  35. a=a+b/2;  
  36. }  
  37.  
  38. voidReport(intiRet)  
  39. {  
  40. printf("iRet=%d\n",iRet);  
  41. }  
  42. };  
  43.  
  44. //application  
  45.  
  46. intmain()  
  47. {  
  48. CMainmain;  
  49. main.Start();  

本文来自王之永博客园博文《C#回调

【编辑推荐】

  1. C#参数类型学习笔记
  2. 处理C#消息的方法
  3. C#重载LoadPostData方法
  4. 概述C#复合控件构建
  5. C# JavaScript函数使用
责任编辑:彭凡 来源: 博客园
相关推荐

2009-08-12 10:11:18

C# 回调函数

2009-08-19 17:10:09

C#回调函数

2009-07-31 16:25:29

C#回调函数API应用

2021-12-07 00:10:25

C# 微信支付

2009-09-01 17:51:47

C#拆箱C#装箱

2009-08-28 12:19:19

C#静态方法

2011-06-15 11:05:14

C语言回调函数

2010-02-04 16:07:39

C++回调函数

2010-03-02 10:54:42

WCF回调操作

2009-08-14 17:09:48

C#引用类型

2022-01-13 14:31:56

MySQL数据库回表

2009-07-30 18:20:21

C#继承

2009-09-07 16:13:56

C# MessageB

2009-09-01 16:07:04

C#命名规约

2009-08-24 11:23:41

C# TimeLabe

2023-01-26 23:44:41

C++代码生命周期

2021-04-12 19:18:23

NVMe存储控制器

2009-08-27 14:29:15

C# explicti

2009-08-25 17:13:57

C#串口编程

2009-09-02 09:24:03

C# this关键字
点赞
收藏

51CTO技术栈公众号