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的参数可以定义的。也可以根据上下文推断出。