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<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>

 

posted on 2009-10-31 09:06  梅桦  阅读(3249)  评论(0编辑  收藏  举报