C# delegate、 Action(Fun)和匿名方法、 Lambda 简单用法

      每次用到委拖(代理)都有点晕,今天把汇总一下,方便后面回顾。

       一 、delegate、 Action(Fun)
         //委托是一个类型,继承自System.MulticastDelegate
       声明委托
        public delegate void NoReturnNoPara();      //无参无返回值
        public delegate void NoReturnWithPara(string name);//有参无返回值
        public delegate int WithReturnNoPara();      //无参有回值

         public void Show()
        {
                 //把方法包裹到变量里面去,变量invoke可以调用方法  把方法当成了一个变量
                 NoReturnNoPara method1 = new NoReturnNoPara(this.DoNothing);//2 委托实例化
                method1.Invoke();    //3 委托实例的调用1
                method1();    //3 委托实例的调用2
                this.DoNothing();

                NoReturnWithPara method2 =  new NoReturnWithPara(this.DoNothingWithPara);
                method2("hello");
        }

       private void DoNothing()
        {
            Console.WriteLine("这里是DoNothing");
        }

        private void DoNothingWithPara(string name)
        {
            Console.WriteLine(name);
        }

       private int  ReturnStr(String name)
       {   String newName ="名子:"+name;
            return newName;
       }

2 Action(无反返)、Fun(有返回)
Action 是将Delegate 的类型定义和实例化省去了,简化了代码(官方https://docs.microsoft.com/en-us/dotnet/api/system.action-1?redirectedfrom=MSDN&view=net-5.0)
上面的两个方法使用就简化了
public void Show()
 {
      Action method1= DoNothing; //无参数
     method1();
     Action<String> method2 =DoNothingWithPara;
     method2("Hello");
     Fun<String,String>  method3  =  returnStr;//带1个参数,返回值。
     String newName= method3("liLei");
 }

二、匿名方法、 Lambda
       这两个是简化了 方法的定义。
   3 匿名方法

       public delegate void NoReturnNoPara();      //无参无返回值
        public delegate void NoReturnWithPara(string name);//有参无返回值
        public delegate int WithReturnNoPara();      //无参有回值
       public void Show()
        {
                 NoReturnNoPara method1 = delegate() {Console.WriteLine("这里是DoNothing");};  
             //DoNothing() 这个方法直接移到Show方法里面,DoNothing()方法相当于被隐藏了。
                 method1();
                 NoReturnWithPara method2 = delegate( name){Console.WriteLine(name);};
                 method2("Hello");
                 ReturnStr method3 =delegate(name){String newName ="名子:"+name;return newName;};
                 String newName= method3("lilei");
        }
      4 Lambda方法
      public void Show()
        {
                 NoReturnNoPara method1 =() =>Console.WriteLine("这里是DoNothing"); 
                 method1();
                 NoReturnWithPara method2 = ( name)=>Console.WriteLine(name);
                 method2("liLei");
                 ReturnStr method3=(name) =>{String newName ="名子:"+name;return newName;};
        }
    5,进一步简化 Action+lambda,简去委托定义和方法嵌入

     public void Show()
        {
                 Action method1 =() =>Console.WriteLine("这里是DoNothing"); 
                 method1();
                Action method2 = ( name)=>Console.WriteLine(name);
                 method2();
                 Fun<String,String>  method2 = ( name)=>{String newName ="名子:"+name;return newName;};
                 String newName=method2("liLei");
        }
     这么一理,还是比清楚了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值