委托、匿名方法到lambda表达式
2024-09-03 09:50:52
在项目中我们经常会接触lambda表达式,链式操作简洁明了。帮我们省了不少事。面对这么神奇的一个东西,是不是也应该了解了解它的本质呢。
今天我们通过一步一步的演变揭开lambda表达式的本质
一.委托
C# 中的委托类似于 C 或 C++ 中函数的指针。委托是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。委托的本质也跟类一样,是用户自定义的类型。类的定义是通过class关键字
,而委托的定义是通过delegate来定义
class Program
{
static void Main(string[] args)
{
//声明一个AddNum类型的变量a,
AddNum a = new AddNum(Add); //创建一个指向Add方法的委托对象
a(, ); //调用a指向的方法
Console.WriteLine(a); //打印a的类型,a(2,3)加上括号才是调用
Console.WriteLine(a(, ));
}
//声明一个方法以便委托调用,要注意的是方法的签名要与委托声明的签名保持一致
public static int Add(int a,int b)
{
return a + b;
}
}
//声明一个委托,要注意的是委托跟类是同一级别的
delegate int AddNum(int a, int b);
二.匿名方法
匿名方法,顾名思义就是没有名字的方法,通常我们调用方法就是根据方法的名字进行调用,那这匿名方法没有名字我们该如何调用嘞。别着急,我们可以通过匿名方法实现委托实例来进行调用
AddNum c = new AddNum(Add); //传统的做法,先通过创建Add方法再创建委托实例
//使用匿名方法创建委托实例
AddNum b = delegate (int m, int n)
{
return m + n;
};
Console.WriteLine(b(,)); //委托的调用还是一样的
三.lambda表达式
lambda是一个匿名方法,C#中的Lambda 表达式都使用 Lambda 运算符 =>,该运算符读为“goes to”
//匿名方法声明委托
AddNum b = delegate (int m, int n){ return m + n; };
//lambda格式的匿名方法的写法
AddNum c = (int m, int n)=>{ return m + n; }; //演变一:可以省略数据类型(编译器可以根据委托类型自动推断)
AddNum d = (m,n) => { return m + n; };
//演变二:当匿名方法只用一个参数,小括号也可以省略
Func<int, bool> e = i => { return true; }; //Func为内置的委托对象,最后一个参数是返回值的类型
//演变三:若委托有返回值,并且方法体只有一行代码,则大括号和return都可以省略
AddNum f = (m, n) => m + n;
最新文章
- C#12种顺序排序
- CentOS6.5下安装Open vSwitch
- Recovery with Incremental Backups
- css不同浏览器兼容性调试 --- 转自: [http://wo.115.com/?ct=detail&;id=31733&;bid=1018841]
- JQuery判断checkbox是否选中-批量
- 【C#学习笔记】退出程序
- Angular - - ngChange、ngChecked、ngClick、ngDblclick
- Java并发编程:volatile 关键字
- 开源API集成测试工具 Hitchhiker v0.2更新 - 压力测试
- linux 磁盘管理三部曲——(1)磁盘结构,认识分区
- iOS通用链接(Universal Links)突然点击无效的解决方案
- Cursor类取出数据
- vue_小项目_吃饭睡觉打豆豆
- eclipse Dynamic web module相关问题
- 11.17 luffycity(7)完结
- js内存空间的那点事
- linux+nginx+mysql+php环境下,安装ecshop
- FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
- 一、怎样使用eclipse查看JDK源码
- java中如何制定自定义异常