Func和Action,委托与lambda表达式,一看就知道

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 ));
}

复制代码

 

关于Lambda的内容请见我的另一篇随笔:

http://www.cnblogs.com/jams742003/archive/2009/12/23/1630737.html

5Func<T>

public   delegate  TResult Func < TResult > ()

 

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

Func < int bool >  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>

转博客园http://www.cnblogs.com/jams742003/archive/2009/10/31/1593393.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值