C#使用匿名函数与委托实现方法的回调
匿名函数
何为匿名函数?
在搞懂匿名函数之前,我们先回顾一下正常函数,
显示的声明一个方法,然后调用。那么匿名函数就是不用声明,直接使用。直接看一个例子。
上图中匿名参数的格式为()=>{ 函数块 }
正常委托调用(不使用匿名函数)。
匿名函数(Anonymous Function)是表示“内联”方法定义的表达式。匿名函数本身及其内部没有值或者类型,但是可以转换为兼容的委托或者表达式树类型。匿名函数转换的计算取决于转换的目标类型:如果是委托类型,则转换计算为引用匿名函数所定义的方法的委托;如果是表达式树类型,则转换将计算以对象结构形式表示方法结构的表达式树。
匿名函数有两种语法风格:Lambda表达式和匿名方法表达式,在大部分情况下,Lambda比匿名方法表达式更简洁,更直观。本人匿名方法表达式没有这么用过,此处终点介绍Lambda表达式。
Lambda表达式的格式:
无参的情况下:()=>{函数体}
有参的情况下:参数的类型可写可不写。
(a,b=>{函数体})
(int a,int b=>{函数体})
委托
委托是一个指向一个方法的引用,即将方法作为参数传递给另一个方法。不熟悉的小伙伴可以详细的百度下,个人水平不够不能讲解的很清楚。
回调函数
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
参考上面的例子,只有在Fun的本身执行完之后,才会调用callBack。上面的例子不是很明显,你可能会说两个方法挨个执行也能实现一样的效果,那么如果不是只是简单的调用consoleWriteLine方法,而是和后台数据交互呢,获取数据之后在执行下面代码,数据获取一般都是异步,这是时候就需要获取数据之后再执行,否则就会出现空引用报错,让我们看下面的这个例子。
运行看一下。
发现并没有调用我们声明的匿名方法,这是因为没有参数a和参数b。修改下代码。
实际效果:
可以看到,先执行的代码本身,3秒后,在对callback赋值后,才执行了匿名函数。
如果用不惯,也可以不使用匿名函数,使用正常的方法输出。
我之前分享的异步加载图片方法,也使用了回调函数。
感兴趣的可以看下异步加载图片
总结:回调函数即完成了某一个特定的事件后然后再执行XX方法,(一般是和后台数据交互),这个方法可以是提前声明出来的,也可以用匿名函数来声明(函数内容较简单,不需要额外声明等情况使用)。另外回调函数不用滥用,因为维护起来的时候会比较麻烦,尤其几层回调互相嵌套的时候,维护起来简直是折磨。
ps:这里是U3D程序狗一只,日常分享工作中遇到的问题与学习笔记。如有错误或者不完善的地方请指出,谢谢!
- C# 委托异步回调 基本使用方法
- C#构建多线程应用程序(1) —— 使用委托来自动创建次线程以实现异步方法的调用
- C#中使用委托、接口、匿名方法、泛型委托实现加减乘除算法
- 详解C#中通过委托来实现回调函数功能的方法
- C#中使用委托表达式与匿名方法实现委托方法
- C#使用委托(delegate)实现在两个form之间传递数据的方法
- C#中使用托管C++类,委托调用,以供托管C++类的成员函数回调的实现方式
- C#中使用委托、接口、匿名方法、泛型委托实现加减乘除算法
- c#打包文件解压缩 C#中使用委托、接口、匿名方法、泛型委托实现加减乘除算法 一个简单例子理解C#的协变和逆变 对于过长字符串的大小比对
- C# 委托异步回调 基本使用方法
- C#中使用委托、接口、匿名方法、泛型委托实现加减乘除算法
- ajax javascript post 方法实现(与C#混合使用)
- 跨平台python异步回调机制实现和使用方法
- C# 异步调用中使用回调方法
- C#中使用委托创建事件实现两个窗体间通信
- C# 委托:把方法组合到一个数组中使用
- C#委托类型-(基本使用方法)
- C#使用接口实现回调
- C# ping命令的实现方法:Ping类的使用
- C#中using以及实现接口IDisposable的使用方法