public void outInt(int x)
{
Console.WriteLine("output x : {0}", x);
}
在C#2.0的匿名delegate中,我们甚至可以访问当前匿名委托的上下文变量。上面的例子在C#2.0中可以这么写:
public void Eample1()
{
thisDelegate testdel1 = outInt;
testdel1(12);
}
或者这么写也可以:
delegate void thisDelegate2(int a);
public void Eample2()
{
int a = 12;
thisDelegate ev2 = delegate(ref int x)
{ Console.WriteLine("output x : {0}", x); };
ev2( ref a);
}
在C#1.1中,委托对于局部变量是没有除参数外的访问方式的,而在2.0中已经可以实现了,我们在看下面的例子:
public static void Eample3()
{
int a = 12;
int y = 32;
thisDeliete ev2 = delegate(ref int x)
{ Console.WriteLine("output x + y : {0}", x + y); };
ev2( ref a);
}
在这个例子中,匿名函数中的内容x + y的值被正确的输出了,这样做有什么意义呢?实际上使用匿名委托最大的好处在于可以完整地克隆当前运行空间上下文的可用变量,我觉着这就是他的意义所在。