您的位置:首页 > 编程语言 > C#

C#使用匿名函数与委托实现方法的回调

2020-08-03 10:19 1886 查看

匿名函数
何为匿名函数?
在搞懂匿名函数之前,我们先回顾一下正常函数,

显示的声明一个方法,然后调用。那么匿名函数就是不用声明,直接使用。直接看一个例子。

上图中匿名参数的格式为()=>{ 函数块 }
正常委托调用(不使用匿名函数)。

匿名函数(Anonymous Function)是表示“内联”方法定义的表达式。匿名函数本身及其内部没有值或者类型,但是可以转换为兼容的委托或者表达式树类型。匿名函数转换的计算取决于转换的目标类型:如果是委托类型,则转换计算为引用匿名函数所定义的方法的委托;如果是表达式树类型,则转换将计算以对象结构形式表示方法结构的表达式树。
匿名函数有两种语法风格:Lambda表达式匿名方法表达式,在大部分情况下,Lambda比匿名方法表达式更简洁,更直观。本人匿名方法表达式没有这么用过,此处终点介绍Lambda表达式。
Lambda表达式的格式:
无参的情况下:()=>{函数体}
有参的情况下:参数的类型可写可不写。
(a,b=>{函数体})
(int a,int b=>{函数体})
委托
委托是一个指向一个方法的引用,即将方法作为参数传递给另一个方法。不熟悉的小伙伴可以详细的百度下,个人水平不够不能讲解的很清楚。
回调函数
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应
参考上面的例子,只有在Fun的本身执行完之后,才会调用callBack。上面的例子不是很明显,你可能会说两个方法挨个执行也能实现一样的效果,那么如果不是只是简单的调用consoleWriteLine方法,而是和后台数据交互呢,获取数据之后在执行下面代码,数据获取一般都是异步,这是时候就需要获取数据之后再执行,否则就会出现空引用报错,让我们看下面的这个例子。

运行看一下。

发现并没有调用我们声明的匿名方法,这是因为没有参数a和参数b。修改下代码。


实际效果:

可以看到,先执行的代码本身,3秒后,在对callback赋值后,才执行了匿名函数。
如果用不惯,也可以不使用匿名函数,使用正常的方法输出。

我之前分享的异步加载图片方法,也使用了回调函数。


感兴趣的可以看下异步加载图片

总结:回调函数即完成了某一个特定的事件后然后再执行XX方法,(一般是和后台数据交互),这个方法可以是提前声明出来的,也可以用匿名函数来声明(函数内容较简单,不需要额外声明等情况使用)。另外回调函数不用滥用,因为维护起来的时候会比较麻烦,尤其几层回调互相嵌套的时候,维护起来简直是折磨。

ps:这里是U3D程序狗一只,日常分享工作中遇到的问题与学习笔记。如有错误或者不完善的地方请指出,谢谢!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: