欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C# 简述Action与function

程序员文章站 2022-07-11 09:07:40
Action 与 Func是.NET类库中增加的内置委托,以便更加简洁方便的使用委托。 最初使用委托时,均需要先定义委托类型,然后定义一个符合委托类型签名的函数,在调用前,需声明并创建委托对象,将指定函数与委托进行关联。 如例1:public delegate int Math(int param1 ......

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);
转自:https://www.cnblogs.com/ultimateworld/p/5608122.html