理解C#回调函数
序言
本篇主要学习了C#回调函数的定义使用。欢迎各位大牛的指导。
正文
回调函数是什么?
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。通俗点讲就是讲某个实现函数作为参数传入另一个函数中去,当然我们可以通过委托接口等其他一些手段实现这种方式。
回调函数的目的?
这还要说,当然肯定会完成某项功能了啊。(汗)
回调函数的实现?
上文也提到了,被回调的函数其实是作为参数传递给要执行的函数的。那如何才能将函数作为参数呢?当然是使用委托了,委托的知识这里就不讲解了。
这样的话我们就很好理解了,那我们就开始实现起来。首先定义一个委托:
delegate void DelegateDone(); //定义一个无返回值的委托
再定义一个实现函数,将委托作为参数传递进来:
void DoWork(DelegateDone callBack){ callBack(); }
看看是不是就实现了一个简单的回调函数了啊。
现在我们再回头来看看,是不是必须在函数入参的时候传递进去呢?那当然不是,那上面只是为了便于我们理解回调函数的实现。下面我就我工作中遇到的回调函数使用给大家做一个参考:
public delegate void GetHeartDataDelegate(HeartModel model); //定义一个委托
public GetHeartDataDelegate GetHeartHandler;
//MQTT接收数据处理
void MQTTReceiver(object sender, MqttMsgPublishEventArgs e)
{
string receiveData = Encoding.Default.GetString(e.Message);
if(null != GetHeartHandler)
{
//省略转换
GetHeartHandler(receiverData); //调用委托函数
}
} //外部调用
void GetHeartDataCallback(HeartModel model)
{
//省略实现代码
}
void Main()
{
GetHeartHandler=new GetHeartDataDelegate (GetHeartDataCallback); //绑定需要回调的函数
}
看代码其实很简单,就是在底层我们检测到了数据的传入,回调给上层具体的函数实现。
总结
回调函数其实就是把某个方法当做参数传递给另外一个方法。在实际工作中,底层数据接收的回调,订单支付的回调等等都是基于这个思想实现的。
理解C#回调函数的更多相关文章
- 理解javascript 回调函数
##回调函数定义 百度百科:回调函数 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数.回调函数不 ...
- 理解 JavaScript 回调函数并使用
JavaScript中,函数是一等(first-class)对象:也就是说,函数是 Object 类型并且可以像其他一等对象(String,Array,Number等)一样使用.它们可以"保 ...
- 如何理解JS回调函数
1.回调函数英文解释: A callback is a function that is passed as an argument to another function and is execut ...
- 理解 JS 回调函数中的 this
任何变量或对象都有其赖以生存的上下文.如果简单地将对象理解为一段代码,那么对象处在不同的上下文,这段代码也会执行出不同的结果. 例如,我们定义一个函数 getUrl 和一个对象 pseudoWindo ...
- 理解JS回调函数
我们经常会用到客户端与Web项目结合开发的需求,那么这样就会涉及到在客户端执行前台动态脚本函数,也就是函数回调,本文举例来说明回调函数的过程. 首先创建了一个Web项目,很简单的一个页面,只有一个bu ...
- 重新理解javascript回调函数
把函数作为参数传入到另一个函数中.这个函数就是所谓的回调函数 经常遇到这样一种情况,某个项目的A层和B层是由不同的人员协同完成.A层负责功能funA,B层负责funcB.当B层要用到某个模块的数据,于 ...
- 简单理解js回调函数
前言 其实回调函数简单通俗点就是当有a和b两个函数,当a作为参数传给b,并在b中执行,这时a就是一个回调(callback)函数,如果a是一个匿名函数,则为匿名回调函数那下面们来通过一个实例来具体解释 ...
- 关于js的callback回调函数的理解
回调函数的处理逻辑理解:所谓的回调函数处理逻辑,其实就是先将回调函数的代码 冻结(或者理解为闲置),接着将这个回调函数的代码放到回调函数管理器的队列里面. 待回调函数被触发调用的时候,对应的回调函数的 ...
- js 回调函数理解与应用
定义:在JavaScript中,回调函数具体的定义为:函数A作为参数(函数引用)传递到另一个函数B中,并且这个函数B执行函数A.我们就说函数A叫做回调函数.如果没有名称(函数表达式),就叫做匿名回调函 ...
随机推荐
- 丢弃掉那些BeanUtils工具类吧,MapStruct真香!!!
在前几天的文章<为什么阿里巴巴禁止使用Apache Beanutils进行属性的copy?>中,我曾经对几款属性拷贝的工具类进行了对比. 然后在评论区有些读者反馈说MapStruct才是真 ...
- C++二分查找:lower_bound( )和upper_bound( )
#include<algorithm>//头文件 //标准形式 lower_bound(int* first,int* last,val); upper_bound(int* first, ...
- 2020-07-16:如何获得一个链表的倒数第n个元素?
福哥答案2020-07-16: 1.快慢指针.快指针先走n步,然后快慢指针同时走,直到快指针走到尾.2.两次遍历.第一次遍历获取链表长度,然后计算出序号,然后遍历获取序号下的元素.3.数组保存.遍历一 ...
- C#LeetCode刷题之#455-分发饼干(Assign Cookies)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4034 访问.. 假设你是一位很棒的家长,想要给你的孩子们一些小饼 ...
- win10 + Ubuntu 20.04 LTS 双系统 引导界面美化
版权声明:本文为CSDN博主「ZChen1996」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/ZChen1 ...
- Webpack开发指南
前言 成为一个全栈工程师,前端是必不可少的,这位前端构建工具webpack是一门必修的技术. 在学习webpack之前,先熟悉一下npm工具:https://www.runoob.com/nodejs ...
- 【Spring】看了这篇Spring事务原理,我才知道我对Spring事务的误解有多深!
写在前面 有很多小伙伴们留言说,冰河,你能不能写一篇关于Spring事务的文章呢?我:可以啊,安排上了!那还等什么呢?走起啊!! 事务的基本原理 Spring事务的本质其实就是数据库对事务的支持,没有 ...
- 在GitHub上删除仓库 or 项目,基操!!
创建错误或者想要抛弃某个仓库or项目,点击选择项目,选择Setting页面,左侧方框Option页拉到底: 你就可以看到一个红色的危险域,called Danger Zone,这不禁让我想到了黑子篮球 ...
- RocketMQ在windows环境下的安装(转)
原博地址:https://www.jianshu.com/p/4a275e779afa 一.预备环境 1.系统 Windows 2. 环境 JDK1.8.Maven.Git 二. RocketMQ部署 ...
- random模块python
random是用于生成随机数的,我们可以利用它随机生成数字或者选择字符串. random.random() 用于生成一个随机浮点数:range[0.0,1.0) ? 1 2 import ran ...