匿名方法
匿名方法是.NET 2.0中引入的高级特性,“匿名”二字说明它可以把实现内联地写在一个方法中,从 而形成一个委托对象,而不用有明确地方法名,例如:
static void Test()
{
Action<string> action = delegate(string value)
{
Console.WriteLine(value);
};
action("Hello World");
}
但是匿名方法的关键并不仅于“匿名”二字。其最强大的特性就在于匿名方法形成了一个闭包,它可 以作为参数传递到另一个方法中去,但同时也能访问方法的局部变量和当前类中的其它成员。例如:
class TestClass
{
private void Print(string message)
{
Console.WriteLine(message);
}
public void Test()
{
string[] messages = new string[] { "Hello", "World" };
int index = 0;
Action<string> action = (m) =>
{
this.Print((index++) + ". " + m);
};
Array.ForEach(messages, action);
Console.WriteLine("index = " + index);
}
}
如上所示,在TestClass的Test方法中,action委托调用了同在TestClass类中的私有方法Print,并对 Test方法中的局部变量index进行了读写。在加上C# 3.0中Lambda表达式的新特性,匿名方法的使用得到 了极大的推广。不过,如果使用不当,匿名方法也容易造成难以发现的问题。