黑马程序员技术交流社区
标题:
委托中的Action<> 与Func<> 的用法
[打印本页]
作者:
〆、单曲循环
时间:
2013-10-25 17:32
标题:
委托中的Action<> 与Func<> 的用法
本帖最后由 〆、单曲循环 于 2013-10-26 13:20 编辑
它们是.net内置的泛型委托吗 用自己定义的委托不是更好吗 难道就是为了省事儿?
作者:
leayon
时间:
2013-10-25 20:48
这些泛型委托应该多用于Lambda表达式吧,这里有一个博客园大牛的文章,你可以去参考一下:http://www.cnblogs.com/leslies2/archive/2012/03/22/2389318.html#a5
作者:
吴彤辉
时间:
2013-10-25 22:54
这两个自带的委托在很多时候可以省去我们自定义委托的工作。
1.Func
该委托有5个重载形式,区别仅在于他所指向的方法的签名的参数个数,分别如下:
Func<TResult>
Func<T,TResult>
Func<T1,T2,TResult>
unc<T1,T2,T3,TResult>
Func<T1,T2,T3,T4,TResult>
其中T,T1,..T4是委托指向的方法的参数的类型,TResult为方法的返回类型
举个例子,在学习委托的时候需要用委托来写个计算平方的小程序,可以这样实现:
class Program
{
private delegate int CalcSquare(int size);
public static void Main()
{
CalcSquare cal = Square;
Console.Write("the square of {0} is {1}", 10, cal(10));
}
private static int Square(int size)
{
return size*size;
}
}
复制代码
首先需要声明一个委托:CalcSquare,如果用Func这个内置的委托来实现,则可以如下:
class Program
{
public static void Main()
{
Func<int,int> cal = Square;
Console.Write("the square of {0} is {1}", 10, cal(10));
}
private static int Square(int size)
{
return size*size;
}
}
复制代码
可见,省去了自定义委托的那步。
2.Action
同样,Action也有以下几种重载形式:
Action
Action<T>
Action<T1,T2>
Action<T1,T2,T3>
Action<T1,T2,T3,T4>
稍稍改下上面的例子:
class Program
{
private delegate void CalcSquare(int size);
public static void Main()
{
CalcSquare cal = size=>Console.WriteLine("the square od {0} is {1}", size, size * size);
cal(10);
}
}
复制代码
同样的需要先声明一个委托。
class Program
{
public static void Main()
{
Action<int> cal = size=>Console.WriteLine("the square od {0} is {1}", size, size * size);
cal(10);
}
}
Func和Action是两个比较有用的委托,能解决我们的很多需求。当然,有时候如果你觉得给委托起个容易理解的名字很重要,也可以去自定义委托
作者:
〆、单曲循环
时间:
2013-10-26 13:17
吴彤辉 发表于 2013-10-25 22:54
这两个自带的委托在很多时候可以省去我们自定义委托的工作。
1.Func
也就是说系统只是在帮用户定义 没有其他特殊含义咯
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2