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); //绑定需要回调的函数 
    }

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

    总结

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

  • 相关阅读:
    ASE19团队项目 beta阶段 model组 scrum report list
    ASE19团队项目 beta阶段 model组 scrum7 记录
    ASE19团队项目 beta阶段 model组 scrum6 记录
    ASE19团队项目 beta阶段 model组 scrum5 记录
    ASE19团队项目 beta阶段 model组 scrum4 记录
    ASE19团队项目 beta阶段 model组 scrum3 记录
    ASE19团队项目 beta阶段 model组 scrum2 记录
    ASE19团队项目 beta阶段 model组 scrum1 记录
    【ASE模型组】Hint::neural 模型与case study
    【ASE高级软件工程】第二次结对作业
  • 原文地址:https://www.cnblogs.com/sunfom/p/8145066.html
Copyright © 2011-2022 走看看