1.匿名函数的概念
匿名函数按字面意思解读就是没有名字的函数。
匿名函数的使用主要是配合委托和事件进行使用。
脱离委托和事件是不会使用匿名函数的
2.匿名函数的基本语法
delegate(参数列表)
{
函数逻辑
};
匿名函数的使用场景:
1.函数中传递委托参数时
2.委托或事件赋值时
3.匿名函数的使用
代码示例:
//1.无参无返回值的匿名函数
Action a=delegate()
{
Console.WriteLine("匿名函数调用")
};
a();//调用函数
//2.有参
Action<int,string> b=delegate(int a,string b)
{
Console.WriteLine(a);
Console.WriteLine(b);
}
b.(100,"123");
//3.有返回值
Func<string> c=delegate()
{
return "123";
}
Console.WriteLine(c());
//4.作为函数参数传递
Test t=new Test();
t.Dosomethin(100,delegate()
{
Console.WriteLin("随参数传递的匿名函数逻辑")
});
4.匿名函数的缺点
匿名函数添加到委托或事件中后,不记录无法单独移除
5.lambda表达式的概念
可以将lambda表达式直接理解为匿名函数的简写,它除了写法不同外,使用上和匿名函数一模一样,都是和委托或者事件配合使用
6.lambda表达式的语法
lambda表达式(参数列表)=>
{
函数体
};
7.闭包
内层的函数可以引用包含在它外层的函数的变量,即使外层函数的执行已经终止
注意:该变量提供的值并非变量创建时的值,而是父函数范围的最终值。
如下代码示例:
public event Action action;
action=()=>
{
Console.WriteLine(value);
};
for(int i=0;i<10;i++)
{
action+=()=>
{
Console.WriteLine(i);
};
}
//这里打印10个10,因为父函数范围最终值为10