zoukankan      html  css  js  c++  java
  • 理解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); //绑定需要回调的函数 
    }

      看代码其实很简单,就是在底层我们检测到了数据的传入,回调给上层具体的函数实现。

    总结

      回调函数其实就是把某个方法当做参数传递给另外一个方法。在实际工作中,底层数据接收的回调,订单支付的回调等等都是基于这个思想实现的。

  • 相关阅读:
    IDAPython学习(一)
    自动提取文件系统---binwalk(一)
    Scapy Fuzz实现——S7协议从建连到“正常交流“(一)
    工控系统的指纹识别技术
    揭秘VxWorks——直击物联网安全罩门
    VxWorks Fuzzing 之道:VxWorks 工控实时操作系统漏洞挖掘调试与利用揭秘
    路由器文件系统与提取
    python 调试技巧
    拿下id_rsa
    elasticsearch 7.1 401 Unauthorized
  • 原文地址:https://www.cnblogs.com/sunfom/p/8145066.html
Copyright © 2011-2022 走看看