分类目录

链接

2013年四月
« 3月   5月 »
1234567
891011121314
15161718192021
22232425262728
2930  

近期文章

热门标签

博主推荐

现在位置:    首页 > .NET > 正文
Func和Action的区别
.NET 暂无评论 阅读(1,505)

Func委托

封装一个带有返回 TResult 参数指定的类型值的方法,它有5个重载:

·Func<TResult>         

·Func<T,TResult>    

·Func<T1,T2,TResult>  

·Func<T1,T2,T3,TResult> 

·Func<T1,T2,T3,T4,TResult> 

这里用一个举例说明:以Func<T,TR>这个来说明。这个从根源讲要说到委托(delegate)。这个方法的意义是有一个T参数,且返回值类型为TR类型的方法。

1)按常规来做的方法为

定义一个返回bool的方法。

public bool IsTen(int i)
{
return i == 10 ? true : false;
}

 

测试

[Test]
public void TestFun1()
{
Assert.AreEqual(
true, IsTen(10));
}

 

2)通过委托来实现

复制代码
delegate bool IsTenDelegate(int i);

public bool IsTen(int i)
{
return i == 10 ? true : false;
}

[Test]
public void TestFun1()
{
//IsTenDelegate d = IsTen;
    IsTenDelegate d = new IsTenDelegate(IsTen);
Assert.AreEqual(
true, d(10));
}

复制代码

 

这里把方法IsTen委托给了委托类型IsTenDelegate。以下是2.0中匿名方法的实现

3)匿名方法

复制代码
[Test]
public void TestFun1()
{
IsTenDelegate  d
= delegate(int i)
{
return i == 10 ? true : false;
};

Assert.AreEqual(true, d(10));
}

复制代码

 

通过匿名方法内联方式实现了委托IsTenDelegate  。然后在3.*版本中,通过lambda表达式成为内联委托的首选方法

4Lambda

复制代码
[Test]
public void TestFun1()
{
IsTenDelegate d 
= x => x == 10 ? true : false;
Assert.AreEqual(
true, d(10));
}

复制代码

5Func<T>

public delegate TResult Func<TResult>()

 

这里Func<T>的方法定义,它是一个delegate,所以,上边的IsTenDelegate 委托可以写成:

Func<intbool> d = x => x == 10 ? true : false;
Assert.AreEqual(
true, d(10));

 

这就是Func,它带有返回值,且有5种重载,可以委托0-4个参数的方法。

Action<T>则与Func意义相近,只是不带返回值。

Action委托

封装一个方法,该方法不采用参数并且不返回值

Action

Action<T>

Action<T1,T2>

Action<T1,T2,T3>

Action<T1,T2,T3,T4>

本文版权归数据库之家所有,转载引用请完整注明以下信息:
本文作者:Bruce
本文地址:Func和Action的区别 | 数据库之家