概述
1、匿名函数
没有名字的函数,主要是配合委托和事件进行使用,脱离委托和事件是不会使用匿名函数的
2、基本语法
delegate (参数列表){ //函数逻辑 };
何时使用?
(1)函数中传递委托参数时
(2)委托和事件赋值时
3、使用
(1)无参无返回
Action a = delegate () { Console.WriteLine("匿名函数"); }; a();
(2)有参
Action<int> a = delegate (int value) { Console.WriteLine(value); }; a(100);
(3)有返回值
直接return,返回值自动识别
Func<string> a = delegate () { return "返回值匿名函数"; }; Console.WriteLine(a());
(4)一般情况会作为函数参数传递,或者作为函数返回值
class Test { public Action action; // 作为参数传递 public void DoSomeThing(int a, Action action) { Console.WriteLine(a); action(); } // 作为返回值 public Action GetFun() { return TestRet; } public void TestRet() { } // 或者一步到位 public Action GetFun2() { return delegate () { Console.WriteLine("作为返回值的匿名函数"); }; } }
作为参数传递的调用
Test t = new Test(); // 方式一 t.DoSomeThing(100, delegate () { Console.WriteLine("作为参数传递的匿名函数"); }); // 方式二 Action ac = delegate () { Console.WriteLine("作为参数传递的匿名函数"); }; t.DoSomeThing(100, ac);
作为返回值的调用
// 方式一 Action ac = t.GetFun2(); ac(); // 方式二 t.GetFun2()();
4、匿名函数的缺点
添加到委托或事件容器中后,无法单独移除,只能直接清空
注意!!!匿名函数会改变变量的生命周期,例如:
static Func<int, int> TestFun(int v) { return delegate (int i) { return i * v; }; }
然后进行调用
Func<int, int> fun = TestFun(2); Console.WriteLine(fun(3))
可以发现,v的生命周期在TestFun()结束时没有停止
最后
以上就是激昂小海豚为你收集整理的C# 匿名函数1、匿名函数2、基本语法3、使用4、匿名函数的缺点的全部内容,希望文章能够帮你解决C# 匿名函数1、匿名函数2、基本语法3、使用4、匿名函数的缺点所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复