class LandmadaShow
{
public delegate void NoReturnWithPara(string name);
//lambda演变历史
public void Show()
{
{
//.NetFramework1.0 1.1
NoReturnWithPara noReturnWithPara = new NoReturnWithPara(this.DoNothing);
noReturnWithPara.Invoke("王大师");
}
int i = 10;
{
//.NetFramework2.0 匿名方法,delegate关键字
//可以访问局部变量
NoReturnWithPara noReturnWithPara = new NoReturnWithPara(delegate (string name)
{
Console.WriteLine(name);
Console.WriteLine(i);
});
noReturnWithPara.Invoke("王大师");
}
{
//.NetFramework3.0 把delegate关键字去掉,增加了一个箭头goes to
//lambda表达式 参数列表=>方法体
NoReturnWithPara noReturnWithPara = new NoReturnWithPara((string name) =>
{
Console.WriteLine(name);
Console.WriteLine(i);
});
noReturnWithPara.Invoke("王大师");
}
{
//省略参数类型,编译器的语法糖,虽然没写,编译时还是有的,根据委托推算
NoReturnWithPara noReturnWithPara = new NoReturnWithPara((name) =>
{
Console.WriteLine(name);
});
noReturnWithPara.Invoke("王大师");
}
{
//如果方法体只有一行,可以去掉大括号和分号
NoReturnWithPara noReturnWithPara = new NoReturnWithPara((name) => Console.WriteLine(name));
noReturnWithPara.Invoke("王大师");
}
{
//new NoReturnWithPara可以省掉,也是语法糖,编译器自动加上
NoReturnWithPara noReturnWithPara = (name) => Console.WriteLine(name);
noReturnWithPara.Invoke("王大师");
}
}
public void DoNothing(string name)
{
Console.WriteLine(name);
}
}