一篇了解C#委托,匿名方法,Lambda,泛型委托

第一种:基础委托

  1. 关键字delegate定义一个委托
  2. 声明一个方法来对应委托
  3. 实例化这个委托
class Program
    {
         //1:关键字delegate定义一个委托
         public delegate int DelegateAdd(int a, int b);
         static void Main(string[] args)
         {
            //3:实例化这个委托
            DelegateAdd Add = new DelegateAdd(AddMeth);
            int res = Add.Invoke(11, 33);
            Console.WriteLine(res);
            Console.ReadLine();
         }

         //2:声明一个方法来对应委托
         public static int AddMeth(int a, int b)
         {
             return a + b;
         }
    }

输出:

第二种:匿名方法

写在前:上面基础委托由三步完成,微软为了简化步骤就引入了匿名方法,也称语法糖。

  1. 关键字delegate定义一个委托
  2. 把一个方法赋值给委托,也就是匿名方法
    class Program
    {
        //1:关键字delegate定义一个委托
        public delegate int DelegateAdd(int a, int b);
         static void Main(string[] args)
         {
            //2:把一个匿名方法赋值给委托
            DelegateAdd Add = delegate (int a, int b) { return a + b; };
            int res = Add.Invoke(55, 72);
            Console.WriteLine(res);
            Console.ReadLine();
         }
    }

输出:

第三种:Lambda表达式

 写在前:微软为了代码更简洁,就提出了Lambda表达式来简化匿名方法。

  1. 关键字delegate定义一个委托
  2. Lambda表达式简化匿名方法
    class Program
    {
        //1:关键字delegate定义一个委托
        public delegate int DelegateAdd(int a, int b);
         static void Main(string[] args)
         {
            //2:Lambda表达式简化匿名方法
            DelegateAdd Add = (int a, int b) => { return a + b; };
            int res = Add.Invoke(99, 2);
            Console.WriteLine(res);
            Console.ReadLine();
         }
    }

输出:

 第四种:泛型委托

写在前:

微软为了委托更加简化,把上面的至少两步直接合成一步来完成,就有了泛型委托;

无返回值使用关键字Action,参数类型都是入参类型;

有返回值使用关键字Func,其中最后一个参数类型就是返回值类型,前面都是入参类型。

  • 无返回值
    class Program
    {
        static void Main(string[] args)
        {
            //无返回值
            Action<int, int> Add = (int a, int b) => { Console.WriteLine(a + b); };
            Add(12, 45);
            Console.ReadLine();
        }
    }

 输出:

  • 有返回值
class Program
    {
        static void Main(string[] args)
        {
            //有返回值
            Func<int, int,int> Add = (int a, int b) => { return a + b; };
            int res = Add(8, 44);
            Console.WriteLine(res);
            Console.ReadLine();
        }
    }

输出:

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值