……T16多达16个的重载

时间:2021-12-26 04:06:18

原文地点:https://www.cnblogs.com/ultimateWorld/p/5608122.html

Action 与 Func是.NET类库中增加的内置委托,以便越发简洁便利的使用委托。
最初使用委托时,均需要先界说委托类型,然后界说一个切合委托类型签名的函数,
在挪用前,需声明并创建委托东西,将指定函数与委托进行关联。
如例1:
public delegate int Math(int param1,int param2);界说委托类型
Public int Add(int param1,int param2)//界说同签名函数
{
Return param1+param2;
}
Math math;//声明委托
math=new Math(Add);创建委托东西,与指定进行关联
math(3,4);//挪用委托函数
如果需要三个、四个参数的委托类型,则需要再次界说委托类型。简单的委托挪用,却需要按照签名不停转变多次界说委托类型,而微软推出了对此进行简化的内置委托类型:
Action和Func,简化了这些不须要的操纵。
内置委托类型,顾名思义Action和Func自己就是已经界说好的委托类型。两种委托类型的区别在于:Action委托签名不供给返回类型,,而Func供给返回类型。
Action委托具有Action<T>、Action<T1,T2>、Action<T1,T2,T3>……Action<T1,……T16>多达16个的重载,此中传入参数均给与泛型中的类型参数T,涵盖了几乎所有可能存在的无返回值的委托类型。Func则具有Func<TResult>、Func<T,Tresult>……Func<T1,T2,T3……,Tresult>17种类型重载,T1……T16为收支参数,Tresult为返回类型。
例1通过简单改革:
Func<int,int,int> math=Add;//指定委托东西并关联函数
math(3,4);//挪用委托函数
无需界说直接进行声明关联。
既然是委托类型,也同样可以与匿名函数、或者给与Lambda表达式结合使用:
匿名函数:
Func<int,int,int> math=delegate(int param1,int param2)
{
Return param1+param2;
}
Lambda:
Func<int,int,int> math=(param1,param2)=>
{
Return param1+param2;
}
Action的使用如同上面Func的使用一样,只是缺少了返回类型,直接挪用委托函数。
Public void Add(int param1,int param2)
{
MessageBox.show((param1+param2).ToString());
}
遇到此类的委托函数挪用,那我们就可以直接用Action了:
Action<int,int> math=Add;
math(3,4);
以上是小我私家对Action和Func的简单理解和介绍,代码均在文档中手敲进行示意性展示,如果存在问题还请谅解。