理解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); //綁定需要回調的函數 
}

  看代碼其實很簡單,就是在底層我們檢測到了數據的傳入,回調給上層具體的函數實現。

總結

  回調函數其實就是把某個方法當做參數傳遞給另外一個方法。在實際工作中,底層數據接收的回調,訂單支付的回調等等都是基於這個思想實現的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM