lambad表达式和闭包------知识点3
2021/7/28 6:06:08
本文主要是介绍lambad表达式和闭包------知识点3,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
lambad表达式
1.定义
1.可以将lambad表达式 理解为匿名函数的简写
它除了写法不同外
使用上和匿名函数一模一样
都是和委托或者事件 配合使用的
using System; namespace Lesson15_lambad表达式 { class Program { static void Main(string[] args) { Console.WriteLine("lambad表达式"); #region 知识点一 什么是lambad表达式 //可以将lambad表达式 理解为匿名函数的简写 //它除了写法不同外 //使用上和匿名函数一模一样 //都是和委托或者事件 配合使用的 #endregion #region 知识点二 lambad表达式语法 //匿名函数 //delegate (参数列表) //{ //}; //lambad表达式 //(参数列表) => //{ // //函数体 //}; #endregion #region 知识点三 使用 //1.无参无返回 Action a = () => { Console.WriteLine("无参无返回值的lambad表达式"); }; a(); //2.有参 Action<int> a2 = (int value) => { Console.WriteLine("有参数Lambad表达式{0}", value); }; a2(100); //3.甚至参数类型都可以省略 参数类型和委托或事件容器一致 Action<int> a3 = (value) => { Console.WriteLine("省略参数类型的写法{0}", value); }; a3(200); //4.有返回值 Func<string, int> a4 = (value) => { Console.WriteLine("有返回值有参数的那么大表达式{0}", value); return 1; }; Console.WriteLine(a4("123123")); //其它传参使用等和匿名函数一样 //缺点也是和匿名函数一样的 #endregion Test t = new Test(); t.DoSomthing(); } } }
闭包
定义
1、内层的函数可以引用包含在它外层的函数的变量
2、即使外层函数的执行已经终止
3、注意:
== 该变量提供的值并非变量创建时的值,而是在父函数范围内的最终值。==
这个很重要
#region 知识点四 闭包 class Test { public event Action action; public Test() { int value = 10; //这里就形成了闭包 //因为 当构造函数执行完毕时 其中申明的临时变量value的声明周期被改变了 //本来value是在方法内,在栈上,随着方法被移除,但是这里把它放入了委托内,改变了它的生命周期,只有清空委托的时候才会将这个value释放掉 action = () => { Console.WriteLine(value); }; for (int i = 0; i < 10; i++) { //此index 非彼index int index = i; //注意如果没有上面的 int index = i;那么在打印事件的时候,打印的都是10,为什么呢,存储变量提供的值并非变量创建时的值,而是在父函数范围内的最终值。i 的最终值是 10,所以存放了10个10,怎么解决,上面那个做法就可以,用 int index = i;这样index就是每次都会开辟新的栈空间,并不是同一个index,像上面那个i来回++,那个才是同一个空间。 action += () => { Console.WriteLine(index); }; } } public void DoSomthing() { action(); } } #endregion //总结 //匿名函数的特殊写法 就是 lambad表达式 //固定写法 就是 (参数列表)=>{} //参数列表 可以直接省略参数类型 //主要在 委托传递和存储时 为了方便可以直接使用匿名函数或者lambad表达式 //缺点:无法指定移除
这篇关于lambad表达式和闭包------知识点3的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-20RabbitMQ教程:新手入门指南
- 2024-11-20Redis教程:新手入门指南
- 2024-11-20SaToken教程:新手入门指南
- 2024-11-20SpringBoot教程:从入门到实践
- 2024-11-20Java全栈教程:从入门到实战
- 2024-11-20Java微服务系统教程:入门与实践指南
- 2024-11-20Less教程:初学者快速上手指南
- 2024-11-20MyBatis教程:新手快速入门指南
- 2024-11-20QLExpress教程:初学者快速入门指南
- 2024-11-20订单系统教程:从入门到实践的全面指南