首页 > 其他 > 详细

Func<T>、Action<T> 的区别于说明

时间:2016-07-15 23:41:41      阅读:207      评论:0      收藏:0      [点我收藏+]

一、Func

Func是一个.Net内置的委托。

Func<Result>,Func<T1,Result>是一个.Net内置的泛型委托。

  • Func<TResult>
  • Func<T,TResult>
  • Func<T1,T2,TResult>
  • Func<T1,T2,T3,TResult>
  • Func<T1,T2,T3,T4,TResult>

它有5种形式,只是参数个数不同;第一个是无参数,但是有返回值;

下面是一个简单的普通委托来传方法的示例。

        private delegate string Say();
        public static string SayHello()
        {
            return "Hello";
        }

        static void Main(string[] args)
        {
            Say say = SayHello;
            Console.WriteLine(say());
            Console.ReadKey();
        }

所以,在有时候,我们不知道一个接口同时要做什么操作的时候,我可以给它留一个委托。

为了更方便,.Net直接默认有了委托。我们再来试试.Net默认带的委托。

        public static string SayHello()
        {
            return "Hello";
        }

        static void Main(string[] args)
        {
            Func<string> say = SayHello;
            Console.WriteLine(say());
            Console.ReadKey();
        }

如果需要参数的,还可以这样传一份。

        public static string SayHello(string str)
        {
            return str + str;
        }

        static void Main(string[] args)
        {
            Func<string, string> say = SayHello;
            string str = say("abc");    
            Console.WriteLine(str);     //输出abcabc
            Console.ReadKey();
        }

二、Action

Action<T>的用法与Func几乎一样,调用方法也类似。

  • Action
  • Action<T>
  • Action<T1,T2>
  • Action<T1,T2,T3>
  • Action<T1,T2,T3,T4>
        private delegate string Say();
        public static void SayHello(string str)
        {
            Console.WriteLine(str);
        }

        static void Main(string[] args)
        {
            Action<string> say = SayHello;
            say("abc");
            Console.ReadKey();
        }

三、Func与Action的区别

Func与Action作用几乎一样。只是

  • Func<Result>有返回类型;
  • Action<T>只有参数类型,不能传返回类型。所以Action<T>的委托函数都是没有返回值的。

四、Func与Action都支持Lambda的形式调用

还是以一个输入后,返回重复一次的值作为示例。

Func<string, string> say = m => m + m;
Console.WriteLine(say("abc"));    //输出abcabc

Func<T>、Action<T> 的区别于说明

原文:http://www.cnblogs.com/kissdodog/p/5674629.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!