委托一-- 系统内置泛型 Action 无返回值,参数可有可无 ,Func 有返回值 参数参数可有可无

博客介绍了诞生于.NET Framework 3.0的Action和Func委托。系统预制这两个委托是为让委托更通用,3.0后API大量使用它们封装,不建议创建新委托。还说明了Action是最多16个泛型参数的无返回值委托,Func是最多16个泛型参数加返回值类型的有返回值委托。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

诞生于 .net FrameWork 3.0,有了 Action 和 Func 基本上我们就不用在自己创建委托了

系统预制 这两个委托的意图也是想 让 委托更加通用

, 因为 Action 和 Func 与 自己写的 完全相同的 参数与返回值的委托却不能转换为同一类型,

没有通用性

在3.0以后的API 就大量使用 Action 和 Func  来封装,所以也不再建议创建新的委托

 

创建 Action 的 方式 :使用语法糖实例化委托的方式看起来真的牛逼,感觉是lamada 的萌芽状态,之前我以为只有 Action 和 Func才能使用这个语法糖呢,原来所有的委托都可以使用语法糖

            //无参数无返回值委托 普通实例化
            Action action = new Action(SaySomething);
            //无参数无返回值委托 语法糖实例化
            Action action1 = SaySomething;
            action.Invoke();
            action1.Invoke();

            //有参数
            Action<string> ac = PeopleSaySomething;
            ac.Invoke("小明");

Action 是最多可以有16个泛型参数 的内置泛型无返回值委托

var ac = new Action<string,int,long,object,Func,string, string, int, long, 
               object, Func, string, string, int, string, int>();

Func的使用方法:

没有参数:

          //委托版本
        static void Main(string[] args)
        {
            Func<string> fun = RetSomething;//实例化 返回值为 string 的 委托
            Console.WriteLine(fun.Invoke());
            Console.Read();
        }

        //无参数无返回值方法
        public static string RetSomething()
        {
            return "哈哈哈";
        }

需要参数的怎么做呢?


        static void Main(string[] args)
        {
            Func<string,string> fun = PeopleSaySomething;//实例化 返回值为 string 的 委托
            Console.WriteLine(fun.Invoke("小明"));
            Console.Read();
        }

        //无参数无返回值方法
        public static string PeopleSaySomething(string name)
        {
            return $"{name},哈哈哈";
        }

在  Func<string,string> 上 F12 出现如下: 最后一个参数是被作为返回值类型的

Func 的参数类型最多也是16个 ,后边还有一个 返回值类型

如下:

  static void Main(string[] args)
        {
            var hh = new Func<string, string, int, object,
                              string, string, int, object,
                              string, string, int, object,
                              string, string, int, object, string>(PeopleSaySomething);
            Console.Read();
        }

        //无参数无返回值方法
        public static string PeopleSaySomething(string name, string a, int z, object w,
                             string l, string s, int x, object e,
                             string d, string c, int i, object r,
                             string f, string v, int o, object t)
        {
            return $"{name},哈哈哈";
        }

Func 是 是最多可以有 16  个泛型参数 的内置  有返回值  泛型  委托( 加上返回值类型就是最多17个参数 )如上

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值