委托可以包含多个方法,这种委托叫做多播委托。
多播委托写法如下:
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<int,int,int> plus = delegate(int arg1,int arg2){ return arg1+arg2; };
转换为Lambda表达式:Func<int,int,int> plus = (arg1,arg2) = >{ return arg1+arg2; }//lambda表达式的参数是不需要声明类型的。
另外,lambda表达式的参数只有一个的时候,可以不加上括号;当函数体的语句只有一句的时候,我们可以不加上花括号,也不加return。
例如:Func<int,int> Test = a => a+1;
通过Lambda表达式可以访问Lambda表达式块外部的变量。这是一个非常好的功能,但如果不能正确使用,也会非常危险。
例如:
int somVal = 5;
Func<int,int> f = x => x+somVal;
Console.WriteLine(f(3));//8
somVal = 7;
Console.WriteLine(f(3));//10
这个方法的结果,不但受到参数的控制,还受到somVal变量的控制,结果不可控,容易出现编程的问题,用的时候要谨慎。