C#中的委托学习

委托一堆知识,什么delegate,Action,Func,Lambda啥的,之前就用用LINQ表达式,完全不清楚他们啥关系,复杂一点的委托方法就GG,最近听了杨中科老师的课程,对委托有个新理解,同时做下记录,希望这个笔记能让大家更深刻清楚C#的委托

参考连接

delegate

首先是delegate这个关键字,他可以声明一个委托,委托可以当成一个变量来对待,而他的赋值是一个方法

class Program
    {
        // 声明委托,包括参数,返回值
        delegate int MyDelegate(int i, int j);

        static void Main(string[] args)
        {
            // 此处赋值,必须参数,委托都对应的方法才能赋值
            MyDelegate d1 = F1;
            // 此处直接调用d1这个委托
            Console.WriteLine(d1(1, 2));
        }

        static void F1(int i, int j)
        {
            Console.WriteLine("我是F1");
        }
    }

    static int F1(int i, int j)
    {
        return i+j;
    }

Action和Func

由于懒惰,delegate太复杂,于是delegate作为祖辈就产生Action和Func的后代,青出于蓝胜于了,他们好处就是简化定义。

  • Action是无返回的Delegate,使用泛型<>来说明方法参数类型是什么,自定义参数数量,如下例子
    Action<int,string> a=F1;//F1是(int,string)的无返回方法
    a(1,"string类型");//调用
    
  • Func是有返回的Delegata,使用泛型<T,T,…,TResult>定义参数类型与返回类型,如下例子
          Func<int, int, string> f1 = F1;//F1是(int,int)的方法,返回是string类型
          f1(1,4);//调用
    

委托匿名方法

还是因懒于起名(实际是只使用一次的方法,或者很简单的方法),那委托方法就不给他起名吧,示例如下

Func<int,int,string> f1 = delegate (int i,int j){return $"{i},{j}"};
f1(1,3);

Lambda表达式

最终还是因为懒,就搞了个Lambda表达式,让委托写起来更简单

  1. 把delegate换成=>
Action<int,int> a1 = (int i,int j)=>{Console.WriteLine("输出一下");};
Func<int,int,string> f1 = (int i,int j)=>{return $"{i},{j}";};
  1. 后面的 (int i,int j) 有种脱裤子放屁的感觉,前面都说明是<int,int,string>了,谁不知道i和j的类型,那再懒惰点
Action<int,int> a1 = ( i, j)=>{Console.WriteLine("输出一下");};
Func<int,int,string> f1 = ( i, j)=>{return $"{i},{j}";};
  1. 你就一行return,Func都告诉我要return了,你还搞个一行用中括号,统统去掉就成了最终形式
Action<int,int> a1 = ( i, j)=>Console.WriteLine("输出一下");
Func<int,int,string> f1 = ( i, j)=> $"{i},{j}";

看委托

以前我一看这些委托就不知要咋处理,现在我们来随便看几个委托方法,让大家会解决委托这玩意

请添加图片描述

这个方法我们可以看到他是Action<ApiVersionOptions>的委托,也就是他是无返回的,输入值是ApiVersionOptions,也就可以使用这个对象改变配置

请添加图片描述
可以看出他是Func<IServiceProvider, THostedService>的委托,也就是输入是IServiceProvider,最后给他return一个THostedService就完事

相信大家都学会了委托这玩意,就一个花里胡哨的东西,但是用起来是真香,也显得自己逼格很高

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值