C#回调函数的简单讲解与应用例子

这篇文章的目的就是讲清楚C#回调函数是什么,以及什么时候使用


using System; namespace CallBackTest { 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 }

下面详细解释一下(包含一些关于封装的意义):

1、中间的FunctionClass中的GetSum()和GetMulti()两个函数称为回调函数。可以看到整个程序中并没有哪个地方通过类似GetSum(1,2)这种形式调用了该函数,只有将其当作另一个函数的参数来进行调用。如

cc.PrintAndCalculate(2, 3, fc.GetSum)

下面是百度百科的定义:

回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
简单来说,就是 public delegate int SomeCalculateWay(int num1, int num2) 这行代码,把 SomeCalculateWay 这几个字符定义成一种类型,什么类型呢?-> 带了两个int参数的函数类型。而PrintAndCalculate()函数的第三个参数是这种类型,GetSum(int,int)也是这种类型,所以GetSum这个函数可以被当做参数传入,并且在打印完两个数字后执行,被称为回调函数。

转载自:https://blog.csdn.net/sajiazaici/article/details/78702144

THE END
分享
二维码
< <上一篇
下一篇>>