老罗为大家言简意赅的道破回调函数到底是什么,为什么需要回调函数。
我先描述一个情形:
比如一个A程序员写了一个比较两个数大小的方法
bool CompareTwo(int a, int b) //约定返回真表示a >= b
{
return a >= b;
}
现在B程序员想判断1和2哪个大。但是他只有数据不打算写方法,他比较笨。所以他就调A程序员写的代码,你可以看成是库。
int a = 1, b = 2;
bool bResult = Compare(a,b);
if(bResult)
{
print("a>=b");
}
else
{
print("a < b");
}
同志们如果B程序员突然想说我心中1比2大啊,因为1是第一名,2是第二名。
所以我得到的结果应该是1 > 2
所以B程序员就写了一个他认为的比较2个数的办法
bool CompareTwoInt(int a, int b)
{
if(a >= b)
{
return false;
}
else
{
return ture;
}
}
但是B程序员还是想用上面代码比较大小。又是按照自己的思路去比较呢。那么A程序员该如何实现一个方法可以接受用户的比较大小思想的呢。
改版如下:
//约定返回真表示a >= b
bool CompareTwo(int a, int b, Func<int,int,bool> funcCompareMethod)
{
bool bResult = funcCompareMethod(a,b);//A程序员写的代码调用了用户传过来的比较思想
return bResult;
}
分析:
这个代码我们看到了什么库函数或者A程序员的方法调了用户或者B程序员的代码。
我们就称库函数调用用户的那个函数为回调函数。
文字理解或者文字游戏:我比如需要你的帮忙,我让你给我比较1和2那个大,但是你其实还是回过来调了我的比较思想也就是反过来问我。最后把比较结果告诉我。
这样的话会不会觉得反正都是写的比较方法为啥还要去调用库多此一举啊,不尽然这里举例没有其他代码,一般库里很多代码很多功能的,不可能都自己写。这个时候为了灵活我们可以写一部分传过来让库调用,我们还是共享了库里大部分代码不用自己去写,节省大量时间和学习成本。Ok谢谢品读。有什么好的见解可以一起讨论下。