多播委托与匿名方法、Lambda表达式

委托可以包含多个方法,这种委托叫做多播委托。

多播委托写法如下:

public void Test1(){ Console.WriteLine("test1")};

public void Test2(){ Console.WriteLine("test2")};

Action a = Test1;

a+=Test2;//委托添加方法

a();

a-=Test1;//委托减少方法

a();

Console.Readkey();

使用多播委托就可以按照顺序调用多个方法,多播委托只能得到调用的最后一个方法的结果,一般我们把多播委托的返回类型申明为void.

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

关于匿名方法

staitic  void  Main(string[]   args)

{

Func   plus = Test1;//正常的委托调用方法

Func   plus1 = delegate(int  arg1,int   arg2)  {  return    arg1 + arg2;   };//匿名方法调用

}

匿名方法一般用于参数回调。

具体功能正在学习中。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Lambda表达式

匿名方法:Func  plus = delegate(int  arg1,int  arg2){   return   arg1+arg2;     };

转换为Lambda表达式:Func  plus = (arg1,arg2) = >{ return  arg1+arg2;   }//lambda表达式的参数是不需要声明类型的。

另外,lambda表达式的参数只有一个的时候,可以不加上括号;当函数体的语句只有一句的时候,我们可以不加上花括号,也不加return。

例如:Func  Test = a =>  a+1;

通过Lambda表达式可以访问Lambda表达式块外部的变量。这是一个非常好的功能,但如果不能正确使用,也会非常危险。

例如:

int  somVal = 5;

Func  f = x => x+somVal;

Console.WriteLine(f(3));//8

somVal = 7;

Console.WriteLine(f(3));//10

这个方法的结果,不但受到参数的控制,还受到somVal变量的控制,结果不可控,容易出现编程的问题,用的时候要谨慎。

你可能感兴趣的:(多播委托与匿名方法、Lambda表达式)