Lamda 的由来(委托演变)

今天遇到一个问题就是lamda是怎么演变的。反正在印象中是有委托发展过来的。但那朋友貌似不太明白。让弄个demo看看。反正闲着就随便写了个。。

首先建个delegate委托

  public delegate string DelegateTran(string s);

 然后建个实现该委托的方法返回类型为string 参数也为string

  public string ToPascal(string s)
        {
            return s.Substring(0, 1).ToUpper() + s.Substring(1).ToLower();
        }

然后就一步一步来演练lamda是如何发展过来的。

在1.1的语法中,

 

//1.1委托

            DelegateTran dtran = new DelegateTran(ToPascal);
            Console.WriteLine(dtran("asfsdfsdfsdfABC"));

 

在2.0框架中进行改进了。既然那个委托名就是累赘。随便叫啥都可以。省去了。

   DelegateTran dtran2 = delegate(string s) { return s.Substring(0, 1).ToUpper() + s.Substring(1).ToLower(); };
            Console.WriteLine(dtran2("asfsdfsdfsdfABC"));
     delegate后面的()代表的是参数{}中的是实现方法。

在3.5框架中感觉2。0基础上还能省点索性delegate去了就变成

 DelegateTran dtran3 = (string s) => (s.Substring(0, 1).ToUpper() + s.Substring(1).ToLower());
            Console.WriteLine(dtran3("asfsdfsdfsdfABC"));
    其中 (string s) => (s.Substring(0, 1).ToUpper() + s.Substring(1).ToLower());
就跟lamda相似了哦。

但和lamda也是有区别的。lamda的参数可以定义的。也可以根据上下文推断出。

 

posted @ 2011-08-12 06:50  风云8  阅读(656)  评论(1编辑  收藏  举报