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的方法。
{
return i == 10 ? true : false ;
}
测试
public void TestFun1()
{
Assert.AreEqual( true , IsTen( 10 ));
}
(2)通过委托来实现
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)匿名方法
public void TestFun1()
{
IsTenDelegate d = delegate ( int i)
{
return i == 10 ? true : false ;
};
Assert.AreEqual( true , d( 10 ));
}
通过匿名方法内联方式实现了委托IsTenDelegate 。然后在3.*版本中,通过lambda表达式成为内联委托的首选方法
(4)Lambda
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
(5)Func<T>
这里Func<T>的方法定义,它是一个delegate,所以,上边的IsTenDelegate 委托可以写成:
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