在接触完C#的基础部分之后,开始了解进阶部分的时候就会遇到一些不理解的名词——回调函数。
微软官方解释:
回调函数是托管应用程序中的代码,可帮助非托管 DLL 函数完成一项任务。 对回调函数的调用间接从托管应用程序中进行传递、经过 DLL 函数,再回到托管实现。 一些通过平台调用的 DLL 函数需要托管代码中的回调函数才能正常运行。
若要从托管代码中调用大部分 DLL 函数,则可以创建函数的托管定义,然后再调用它。 此过程相当简单。
使用需要回调函数的 DLL 函数还有一些其他步骤。 首先,必须通过查看函数的文档来确定该函数是否需要回调。 然后,需要在托管应用程序中创建回调函数。 最后,调用 DLL 函数,将指针作为一个参数传递给回调函数。
回调函数非常适合用于需要重复执行一项任务的情况。
翻译:回调函数就是通过声明方法委托,将委托作为方法参数进行传递,在调用时只需要传递实际使用的方法进行调用即可,简而概之就是将将方法作为参数给另外一个方法调用,而这其中的过程就是通过函数指针调用的函数,当一个函数的指针(地址)作为参数传递给另一个函数,当这个指针指向的函数就是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用,用于对事件或条件的响应,降低程序耦合性。
代码解释:
//用户层
class UserClass
{
static void Main(string[] args)
{
BaseClass baseClass = new BaseClass();
DevolperClass devolper = new DevolperClass();
//传参使用
baseClass.AddCaculate(1, 1, devolper.GetSum);
baseClass.AddCaculate(1, 10, devolper.GetMulit);
Console.ReadKey();
}
}
//专业人员方法开发层
public class DevolperClass
{
public int GetSum(int a, int b)
{
Console.WriteLine("使用了开发层方法结果为{0}", a + b);
return a + b;
}
public int GetMulit(int a, int b)
{
Console.WriteLine("使用了开发层方法结果为{0}", a * b);
return a * b;
}
}
//系统底层
public class BaseClass
{
public delegate int CalSum(int a, int b);
public int AddCaculate(int a, int b, CalSum cal)
{
Console.WriteLine("使用了系统底层方法");
return cal(a, b);
}
}
示意图:



