一.定义
没有名字的函数.
主要配合委托,事件进行使用.
脱离委托和事件,是不会使用匿名函数的.
二.基本语法
delegate(参数列表)
{
//函数逻辑
}
使用场合:
1.函数中传递委托参数时
2.委托事件赋值时
三.使用
//注意,不能单独这样写出来,会报错,匿名函数的使用不能脱离委托事件
//delegate()
//{
// //匿名函数逻辑
//}
//无参无返回
//声明
Action a = delegate()
{
//函数逻辑
Console.WriteLine("匿名函数逻辑");
};
//调用
//委托被调用时,匿名函数才被调用
a();//执行委托,本质执行了匿名函数
//有参数
Action<int,string> b = delegate(int a,string b)
{
Console.WriteLine(a);
Console.WriteLine(b);
};
//调用
b(100,"123");
//有返回值
Func<string> c = delegate()
{
return "123";
};
//调用
Console.WriteLine(c());
作为函数的参数
class Test
{
public void MyFunc(Action fun)
{
fun();
}
}
//使用时
Test t = new Test();
t.MyFunc(delegate()
{
Console.WriteLine("匿名函数");
}
);
//等价于
//t.MyFunc(Func);
//public void Func()
//{
//
//}
作为函数返回值
class Test
{
public Action MyFun()
{
//return ReturnFunc();//若不用匿名函数
return delegate()
{
Console.WriteLine("匿名函数作为返回值");
};
}
public void ReturnFunc()
{
}
}
//使用
Test t = new Test();
Action a = t.MyFun();
a();
//使用方式2
t.MyFun()();
四.匿名函数的缺点
//匿名函数添加到委托事件后,因为没有名字,无法单独移除
Action a = delegate()
{
Console.WriteLine("匿名函数1");
};
a+= delegate()
{
Console.WriteLine("匿名函数2");
};
a();
//此时无法单独移除订阅的函数1或函数2,即使-=相同逻辑也没用,只能全部清空
资料来源<唐老狮C#教程>