1、回调函数就是一个通过函数指针调用的函数。
如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
被回调的函数其实是作为参数传递给要执行的函数的。那如何才能将函数作为参数呢?当然是使用委托了;
回调函数其实就是把某个方法当做参数传递给另外一个方法。在实际工作中,底层数据接收的回调,订单支付的回调等等都是基于这个思想实现的。
2、回调函数示例:
namespace CallBackFunction
{
class Program
{
static void Main(string[] args)
{
//在静态函数Main中调用非静态方法时,必须先实例化该类对象,方可调用GetSum方法
Program prog = new Program();
//实例化SumClass类
SumClass sc = new SumClass();
//回调调用本类中的GetSum()函数
int result=sc.SumAll(prog.GetSum);
Console.WriteLine(result.ToString());
}
private int GetSum(int a, int b)
{
return (a + b);
}
}
class SumClass
{
public delegate int Sum(int num1, int num2);
public int SumAll(Sum sum)
{
//可以进行些别的操作
return sum(1, 2);//调用传入函数的一个引用
}
//可以封装更多的业务逻辑方法
}
}
3、示例2: SumClass 类内部触发回调函数
namespace CallBackFunction
{
class Program
{
static void Main(string[] args)
{
//在静态函数Main中调用非静态方法时,必须先实例化该类对象,方可调用GetSum方法
Program prog = new Program();
//实例化SumClass类
SumClass sc = new SumClass();
//设置回调函数,并调用GetSum()
int result=sc.SetCallBack(prog.GetSum);
Console.WriteLine(result.ToString());
}
private int GetSum(int a, int b)
{
return (a + b);
}
}
class SumClass
{
//声明回调函数原型,即委托
public delegate int Sum(int num1, int num2);
//相当于定义函数指针
public Sum OnSum = null;
//设置回调函数地址
public void SetCallBack(Sum Parameter)
{
this.OnSum = Parameter;
}
//调用回调函数
private void CallBackFunction(int num1, int num2)
{
if(OnSum != null)
{
OnSum(num1, num2);
}
}
//内部响应回调函数调用 某特定条件下
CallBackFunction(12,13);
}
}
**************************************************************************************************************