理解C#回調函數

序言

  本篇主要學習了C#回調函數的定義使用。歡迎各位大牛的指導。函數

正文

回調函數是什麼?

  回調函數就是一個經過函數指針調用的函數。若是你把函數的指針(地址)做爲參數傳遞給另外一個函數,當這個指針被用來調用其所指向的函數時,咱們就說這是回調函數。回調函數不是由該函數的實現方直接調用,而是在特定的事件或條件發生時由另外的一方調用的,用於對該事件或條件進行響應。通俗點講就是講某個實現函數做爲參數傳入另外一個函數中去,固然咱們能夠經過委託接口等其餘一些手段實現這種方式。學習

回調函數的目的?

  這還要說,固然確定會完成某項功能了啊。(汗)spa

回調函數的實現?

  上文也提到了,被回調的函數實際上是做爲參數傳遞給要執行的函數的。那如何才能將函數做爲參數呢?固然是使用委託了,委託的知識這裏就不講解了。指針

  這樣的話咱們就很好理解了,那咱們就開始實現起來。首先定義一個委託:code

delegate void DelegateDone(); //定義一個無返回值的委託

  再定義一個實現函數,將委託做爲參數傳遞進來:blog

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

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

總結

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

相關文章
相關標籤/搜索