回调函数的作用通俗点讲就是完成了某个动作之后可以立马进行另一个动作,但那个动作你不确定具体会干什么,你可以根据不同的需求来进行不同的改变,这就是回调函数的作用
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace 回调函数
{
class Program
{
static void Main(string[] args)
{
CalculateClass cc = new CalculateClass();
FunctionClass fc = new FunctionClass();
int result1 = cc.PrintAndCalculate(2, 3, fc.GetSum);
Console.WriteLine("调用了开发人员的加法函数,处理后返回结果:" + result1);
int result2 = cc.PrintAndCalculate(2, 3, fc.GetMulti);
Console.WriteLine("调用了开发人员的乘法函数,处理后返回结果:" + result2);
Console.ReadKey();
}
}
class FunctionClass //开发层处理,开发人员编写具体的计算方法
{
public int GetSum(int a, int b)
{
return (a + b);
}
public int GetMulti(int a, int b)
{
return (a * b);
}
}
#region 实际开发中,下面这个类会封装起来,只提供函数接口。相当于系统底层
class CalculateClass
{
public delegate int SomeCalculateWay(int num1, int num2);
//将传入参数在系统底层进行某种处理,具体计算方法由开发者开发,函数仅提供执行计算方法后的返回值
public int PrintAndCalculate(int num1, int num2, SomeCalculateWay cal)
{
Console.WriteLine("系统底层处理:" + num1);
Console.WriteLine("系统底层处理:" + num2);
return cal(num1, num2);//调用传入函数的一个引用
}
//可以封装更多的业务逻辑方法
}
#endregion
}
****回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
简单来说,就是 public delegate int SomeCalculateWay(int num1, int num2) 这行代码,把 SomeCalculateWay 这几个字符定义成一种类型,什么类型呢?-> 带了两个int参数的函数类型。而PrintAndCalculate()函数的第三个参数是这种类型,GetSum(int,int)也是这种类型,所以GetSum这个函数可以被当做参数传入,并且在打印完两个数字后执行,被称为回调函数。****
————————————————
有的同学可能会问了,那为什么不直接写int result1 = GetSum(1,2)呢?岂不是更方便?用这个回调函数意义在哪呢?
这就涉及到封装和实际开发的问题了 ↓
2、在实际开发中,CalculateClass这个类会被封装起来,比如提供一个dll文件给你,你通过引用dll来调用里面的参数或者函数。一般项目里的大佬/主程都会把这些底层的东西打包进dll,防止误操作使得系统崩溃,也让外界不能轻易访问底层的东西。
在这个类中,public delegate int SomeCalculateWay(int num1, int num2); 这一语句声明了一个委托,后面定义的SomeCalculateWay cal就代表着cal是一个带有两个int参数的函数。
————————————————
感谢 这个博友 的链接 让我读懂了 回调函数 感谢 出处: https://blog.csdn.net/sajiazaici/article/details/78702144