理解C#回调函数

摘要:
前言本文重点介绍C#回调函数的定义和使用。回调函数不是由函数的实现者直接调用的,而是在特定事件或条件发生时由另一方调用,并用于响应事件或条件。首先,定义一个委托:delegatevoid DelegateDone()//定义一个没有返回值的委托,然后定义一个实现函数。将委托作为参数传递:void DoWork{callBack();}以查看是否实现了简单的回调函数。当然不是。以上只是为了让我们了解回调函数的实现。摘要回调函数实际上是将一个方法作为参数传递给另一个方法。
序言

  本篇主要学习了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#回调函数》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Selenium:元素等待的4种方法k8s命令下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

websql的添加和查询

openDatabase 我们可以使用这样简单的一条语句,创建或打开一个本地的数据库对象 vardb =openDatabase('testDB','1.0','Test DB',2*1024*1024); 复制 openDatabase接收五个参数: 数据库名字 数据库版本号 显示名字 数据库保存数据的大小(以字节为单位 ) 回调函数(非必须)...

KindEditor 一款好用的HTML可视化编辑器(富文本编辑器)

  KindEditor使用JavaScript编写,可以无缝的于Java、.NET、PHP、ASP等程序接合。 KindEditor非常适合在CMS、商城、论坛、博客、Wiki、电子邮件等互联网应用上使用,2006年7月首次发布2.0以来,KindEditor依靠出色的用户体验和领先的技术不断扩大编辑器市场占有率,目前在国内已经成为最受欢迎的编辑器之一。...

Java多线程:向线程传递参数的三种方法

在传统的同步开发模式下,当我们调用一个函数时,通过这个函数的参数将数据传入,并通过这个函数的返回值来返回最终的计算结果。但在多线程的异步开发模式下,数据的传递和返回和同步开发模式有很大的区别。由于线程的运行和结束是不可预料的,因此,在传递和返回数据时就无法象函数一样通过函数参数和return语句来返回数据。本文就以上原因介绍了几种用于向线程传递数据的方法...

将Delphi的对象方法设为回调函数

心血来潮,为了实现更好的通用性和封装性,需要把类方法作为回调函数,搜得一篇好文,节选转发。命名似乎应该是MethodToCallback才合适,可惜调试时总是报错,debugging。 原文地址:http://blog.csdn.net/linzhengqun/article/details/1451088 Win32的API有一些需要回调函数,说白...

nodeJS从入门到进阶一(基础部分)

一、Node.js基础知识 1、概念 简单的说 Node.js 就是运行在服务端的 JavaScript。 Node.js 是JavaScript的运行环境 Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。 2、安装使用 官网下载地址:http://nodejs.cn/ nodeJS5个基本对象: 1、require 引...

第一个GTK+程序

在这一章节中,我们将开始编写第一个GTK+程序。 超级简单的例子 我们要“制造”一个超级简单的GTK+程序。就是显示一个空白的窗口。 #include <gtk/gtk.h> int main( int argc, char *argv[]) { GtkWidget *window; gtk_init(&argc, &...