DateTime.Now); 3、去掉了参数类型

时间:2021-07-28 02:54:16

前面我们学习了委托,那么委托与Lambda表达式之间又有什么关系呢?

一、Lambda表达式

我们来看一段代码:

public delegate void NoReturnWithPara(string name, DateTime now); public class LambdaShow { public static void Show() { NoReturnWithPara method = new NoReturnWithPara(Study);//委托实例化,要求传入的要领必需满足委托的约束 method.Invoke("jack",DateTime.Now); } private static void Study(string name,DateTime now) { Console.WriteLine("{0}{1}正在学习Lambda表达式",name,now); } }

上面一段代码是用委托的形式表示的。接下来我们用Lambda表达看看是怎样的。

public delegate void NoReturnWithPara(string name, DateTime now); public class LambdaShow { public static void Show() { NoReturnWithPara method10 = (s, b) => Console.WriteLine("{0}{1}正在学习Lambda表达式", s, b); method10.Invoke("jack", DateTime.Now); } private static void Study(string name,DateTime now) { Console.WriteLine("{0}{1}正在学习Lambda表达式",name,now); } }

这两段代码的输出功效是一模一样的。

那么从第一段酿成第二段到底是怎样一个过程呢?接下来我们来看看:

1、将具体的要领酿成匿名要领

NoReturnWithPara method1 = new NoReturnWithPara( delegate(string name,DateTime now) { Console.WriteLine("{0}{1}正在学习Lambda表达式", name, now); }); method1.Invoke("jack", DateTime.Now);

2、Lmabda表达式   把delegate换成=>

NoReturnWithPara method2 = new NoReturnWithPara( (string name, DateTime now)=> { Console.WriteLine("{0}{1}正在学习Lambda表达式", name, now); });//Lmabda表达式 把delegate换成了=> method2.Invoke("jack", DateTime.Now);

3、去失了参数类型,因为”委托实例化要求传入的要领必需满足委托的约束“

NoReturnWithPara method3 = new NoReturnWithPara( (name, now) => { Console.WriteLine("{0}{1}正在学习Lambda表达式", name, now); }); method3.Invoke("jack", DateTime.Now);

4、去失new NoReturnWithPara();

NoReturnWithPara method4 = (name, now) => { Console.WriteLine("{0}{1}正在学习Lambda表达式", name, now); }; method4.Invoke("jack", DateTime.Now);

5、要领体只有一行,我们可以去失{}。

NoReturnWithPara method5 = (name, now) => Console.WriteLine("{0}{1}正在学习Lambda表达式", name, now); method5.Invoke("jack", DateTime.Now);

Lambda表达式就是这样来的。

二、系统自带的各类委托

其实我们在开发中,根基是不需要声明委托的,,框架为我们供给了一些委托,接下来我们来看看.net框架自带的各类委托。

1、不带返回值的委托

Action act1 = () => { }; //泛型委托 Action<string> act2 = name => { Console.WriteLine(); };//一个参数的话,可以去失小括号 //最多可以有16个参数 Action<string, int, long, DateTime, char, double, decimal> act3 = (par1, par2, par3, par4, par5, par6, par7) => { };

2、带返回值的委托

Func<string> fun1 = () => "fdafds"; Func<DateTime> fun2 = () => DateTime.Now; //最多可以有16个参数,带一个返回值 Func<string, int, long, DateTime, char, double, decimal, DateTime> fun3 = (par1, par2, par3, par4, par5, par6, par7) => DateTime.Now; Func<string, int, long, DateTime, char, double, decimal, Action> fun4 = (par1, par2, par3, par4, par5, par6, par7) => act1;