本文主要是介绍C# 匿名函数 delegate(参数...){ },希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
什么是匿名函数
顾名思义,就是没有名字的函数
匿名函数的使用主要是配合委托和事件进行使用
脱离委托和事件 是不会使用匿名函数的
基本语法
delegate (参数列表)
{
函数逻辑
};
何时使用?
1.函数中传递委托参数时
2.委托或事件赋值时
使用
static void Main(string[] args){//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 "123123";};Console.WriteLine(c());//4.一般情况会作为函数参数传递 或者 作为函数返回值Test t = new Test();Action ac = delegate (){Console.WriteLine("随参数传入的匿名函数逻辑");};t.Dosomthing(50, ac);// 参数传递t.Dosomthing(100, delegate (){Console.WriteLine("随参数传入的匿名函数逻辑");});// 返回值Action ac2 = t.GetFun();ac2();//一步到位 直接调用返回的 委托函数t.GetFun()();
}class Test{public Action action;//作为参数传递时public void Dosomthing(int a, Action fun){Console.WriteLine(a);fun();}//作为返回值public Action GetFun(){return delegate() {Console.WriteLine("函数内部返回的一个匿名函数逻辑");};}
}
匿名函数缺点
添加到委托或事件容器中后 不记录 无法单独移除 只能置空
Action ac3 = delegate ()
{
Console.WriteLine("匿名函数一");
};
ac3 += delegate ()
{
Console.WriteLine("匿名函数二");
};
ac3();
// 因为匿名函数没有名字 所以没有办法指定移除某一个匿名函数
// 此匿名函数 非彼匿名函数 不能通过看逻辑是否一样 就证明是一个
//ac3 -= delegate ()
//{
// Console.WriteLine("匿名函数一");
//};
ac3 = null;
//ac3();
练习
写一个函数传入一个整数,返回一个函数
之后执行这个匿名函数时传入一个整数和之前那个函数传入的数相乘
返回结果
class Program{public static void Main(){Console .WriteLine ( First(5)(3));}public static Func<int,int> First(int a){return delegate (int b){return b * a;};}}
这篇关于C# 匿名函数 delegate(参数...){ }的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!