A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 〆、单曲循环 中级黑马   /  2013-10-25 17:32  /  1537 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 〆、单曲循环 于 2013-10-26 13:20 编辑

它们是.net内置的泛型委托吗  用自己定义的委托不是更好吗  难道就是为了省事儿?

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

3 个回复

倒序浏览
这些泛型委托应该多用于Lambda表达式吧,这里有一个博客园大牛的文章,你可以去参考一下:http://www.cnblogs.com/leslies2/archive/2012/03/22/2389318.html#a5
回复 使用道具 举报
这两个自带的委托在很多时候可以省去我们自定义委托的工作。
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为方法的返回类型

     举个例子,在学习委托的时候需要用委托来写个计算平方的小程序,可以这样实现:
  1. class Program
  2.    {
  3.         private delegate int CalcSquare(int size);

  4.        public static void Main()
  5.        {
  6.             CalcSquare cal = Square;

  7.            Console.Write("the square of {0} is {1}", 10, cal(10));
  8.        }
  9.         private  static int Square(int size)
  10.        {
  11.             return size*size;
  12.        }
  13.     }
复制代码
首先需要声明一个委托:CalcSquare,如果用Func这个内置的委托来实现,则可以如下:
  1. class Program
  2.    {
  3.         public static void Main()
  4.        {
  5.             Func<int,int> cal = Square;

  6.            Console.Write("the square of {0} is {1}", 10, cal(10));
  7.        }
  8.         private  static int Square(int size)
  9.        {
  10.             return size*size;
  11.        }
  12.     }
复制代码
可见,省去了自定义委托的那步。
2.Action

    同样,Action也有以下几种重载形式:

Action
Action<T>
Action<T1,T2>
Action<T1,T2,T3>
Action<T1,T2,T3,T4>
    稍稍改下上面的例子:
  1. class Program
  2.    {
  3.         private delegate void CalcSquare(int size);

  4.        public static void Main()
  5.        {
  6.             CalcSquare cal = size=>Console.WriteLine("the square od {0} is {1}", size, size * size);

  7.            cal(10);
  8.        }
  9.     }
复制代码
同样的需要先声明一个委托。
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是两个比较有用的委托,能解决我们的很多需求。当然,有时候如果你觉得给委托起个容易理解的名字很重要,也可以去自定义委托

评分

参与人数 1技术分 +2 收起 理由
追溯客 + 2

查看全部评分

回复 使用道具 举报
吴彤辉 发表于 2013-10-25 22:54
这两个自带的委托在很多时候可以省去我们自定义委托的工作。
1.Func

也就是说系统只是在帮用户定义 没有其他特殊含义咯
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马