基本概念:没有名字的函数,主要是配合委托和事件使用。
语法:delegate (参数列表) { //函数逻辑 }
使用:
-
函数中传递委托参数;
-
委托或事件赋值。
-
实例
//无参无返回值匿名函数
Action action1 = delegate ()
{
Console.WriteLine("===这是一个无参无返回值的匿名函数===");
};
action1();
//有参无返回值匿名函数
Action<int> action2 = delegate (int value)
{
Console.WriteLine("===这是一个有参无返回值的匿名函数===");
Console.WriteLine("参数为:"+value);
};
action2(2);
//无参有返回值匿名函数
Func<string> func1 = delegate ()
{
Console.WriteLine("===这是一个无参有返回值的匿名函数===");
return "这是返回值";
};
Console.WriteLine(func1());
//有参有返回值匿名函数
Func<int,string> func2 = delegate (int value)
{
Console.WriteLine("===这是一个有参有返回值的匿名函数===");
Console.WriteLine("参数为:" + value);
return "这是返回值";
};
Console.WriteLine(func2(1432));
- 一般情况下作为函数参数传递或者作为函数返回值
//函数参数传递
Test test = new Test();
test.TestFun(delegate ()
{
Console.WriteLine("作为函数参数进行传递");
});
//函数返回值
test.TestFun3()();
class Test
{
//函数参数传递
public void TestFun(Action action)
{
Console.WriteLine("这是匿名函数作为函数参数传递使用");
action();
}
//函数返回值
public Action TestFun2(Action action)
{
Console.WriteLine("这是匿名函数作为函数返回值使用");
return action;
}
public Action TestFun3()
{
return delegate ()
{
Console.WriteLine("这是匿名函数作为函数返回值使用");
};
}
}
缺点:添加到委托或事件变量中的匿名函数无法单独移除。
练习题:
//练习题
//写一个函数传入一个整数,返回一个函数
//之后执行这个匿名函数时传入一个整数和之前那个函数传入的数相乘返回结果
Func<int, int> IntegerTest(int value)
{
return delegate (int value1)
{
return value * value1;
};
}
Console.WriteLine(IntegerTest(5)(100));