关于拉姆达,委托,匿名函数

相信您一定听过这样的几个名词,拉姆达,委托,匿名函数。这三个名词之间有着一定的联系,至于他们的定义百度有很多,我来说说我理解的它们之间的联系和区别。

首先是匿名函数,在c# 2.0时加入了匿名函数。基本上是在定义委托的时候使用匿名函数。如下代码:

//声明一个委托类型
delegate void DelTest();
public void DoSomeThing()
{
      DelTest DelT2 = delegate()
      {
            System.Console.WriteLine("我是一个匿名方法!");
      };
}

delegate()={ //代码体 } 这样就是匿名函数。到了C# 3.0 时,有了拉姆达表达式,匿名函数就有了第二种方式。如下代码:

//声明一个委托类型
delegate void DelTest();
public void DoSomeThing()
{
     //到了C#3.0时代,又增加了一种更简便的拉姆表达式。
     DelTest DelT3 = () => { System.Console.WriteLine("其实,,,我也是一种匿名方法!");};
}

所有,匿名函数有两种:

       1> 通过delegate 关键字定义。

       2> 通过拉姆达表达式定义。

在有了匿名函数的情况下,定义委托变得更加的简洁明了。从C#1.0到 C#3.0 ,委托经过了这样的定义过程:

        //声明一个委托类型
        delegate void DelTest();
        public void Func1()
        {
            System.Console.WriteLine("我是一个即将被交由委托执行的方法!");
        }
        public void DoSomeThing()
        {

            //在C#1.0时代,委托是这样定义的。
            DelTest DelT = new DelTest(Func1);
            //到了C#2.0时代,有了匿名函数。通过匿名函数使代码更简洁。
            DelTest DelT2 = delegate()
            {
                System.Console.WriteLine("我是一个匿名方法!");
            };
            //到了C#3.0时代,又增加了一种更简便的拉姆表达式。
            DelTest DelT3 = () => { System.Console.WriteLine("其实,,,我也是一种匿名方法!");                 };
        }

后来,有了一种新的泛型委托Func<T> 和Action<T>

            Func<string> Func1 = () => { return "我是一个有返回值的泛型委托,如果我有多个参数传入,最后一个就是我的返回类型"; };
            Func<string, int> Func2 = (string a) => { return 1; };
            Action<string> Act1 = (string a) => { /*我是只有参数没有返回值的*/ };
            Action<string, int> Act2 = (string a, int b) => { /*我是只有参数没有返回值的*/ };

Func<T>和Action<T> 的区别:

     相同:Func和Action都是泛型委托,参数都是可以多个。

     不同:Func 是有返回值,当参数任意个时,最后一个就是返回值的类型。Action只有入参,没有出参,没有返回值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值