C#1~3 从委托看C#的进化(深入解析c#读书笔记)
时间:2011-02-08 来源:穆容
1. 声明委托类型
delegate void StringProcessor(string input)
2. 必须有一个方法包含了要执行的代码(并且与上一条中的签名匹配)
void PrintString(string x)
{…}
3. 必须创建一个委托实例
StringProcessor proc1;
proc1 = new StringProcessor(PrintString)
4. 必须调用委托实例
proc1 (”Hello“)
到了c#2中的呢,委托变成了这个样子:
首先,在c#2中引入了一中隐式转换:
c#2支持从方法组到一个兼容委托类型的隐式转换,所谓方法组,其实就是一个方法名
如在1.0中的:proc1 = new StringProcessor(PrintString)
到了2.0中就变成了:proc1 = PrintString
隐式转换会将一个方法组转换为具有兼容签名的任意委托类型
这是其一,其二在c#2.0中,还引入了匿名方法的概念
匿名方法允许你指定一个内联委托实例的操作,座位创建委托的实例表达式的一部分。形如
Proc1 = delegate(string input)
{…}
书中的例子更能说明问题,形如:
Action<string> printReverse = delegate(string text)
{
char[] c = text.ToCharArray();
Array.Reverse(c);
…
}
在C#3中,委托被Lambda表达式所代替,形如
Func<string,int> returnLength;
returnLength = text=>text.length;
此外,我们上面的例子可以改写为:
Proc1 = text =>{Console.Write(text);}
明白了这个升级关系后,今后再在LINQ中遇到FUNC<xxx>之类的东西,就不会头大了