c#委托Action和Func

来源:互联网 发布:碎片化时间 知乎 编辑:程序博客网 时间:2024/03/29 08:36

今天才知道原来c#中有Action和Func两个委托可以简化委托的定义过程,有了这两个类就不用像传统定义委托那样使用Delegate定义。

Action:

Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>    方法名

使用Action定义的委托,是没有返回值的,定义的委托函数参数可以为0也可以多个,最多可以有16个参数如

例子:

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication1{    class test    {        public void show()        {            Console.WriteLine("没参数的委托");        }        public void show1(int a)        {            Console.WriteLine("带一个参数{0}的委托", a);        }    }    class Program    {        static void Main(string[] args)        {            test s = new test();            Action test;            test = s.show;            Action<int> test2;            test2 = s.show1;            test();            test2(2);            Console.ReadLine();        }    }}
Func:

Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16,Tresult>

使用Action定义的委托,是有返回值的,定义的委托函数参数可以为0也可以多个,最多可以有16个参数,Func无论定义多少个参数类型,最后一个参数类型是返回值类型

namespace ConsoleApplication1{    class test    {        public int show()        {            return 0;        }        public string show1(string a)        {            return a;        }    }    class Program    {        static void Main(string[] args)        {            test s = new test();            Func<int> test;            test = s.show;            Func<string, string> test2;            test2 = s.show1;            Console.WriteLine(test.Invoke());//Invoke()其实跟test()作用一样,这样使用能够比较容易区分是方法还是委托            Console.WriteLine(test2test.Invoke("字符串"));            Console.ReadLine();        }    }}


原创粉丝点击