C#2.0中提供了通过delegate实现匿名函数功能,能有效地减少用户的薄记代码工作,例如
...
button1.Click += new EventHandler(button1_Click);
...
void button1_Click(Object sender, EventArgs e) {
// Do something, the button was clicked...
}
...
可以被简化为直接使用匿名函数构造,如
...
button1.Click += delegate(Object sender, EventArgs e) {
// Do something, the button was clicked...
}
...
关于匿名函数的使用方法可以参考JeffreyRichter的WorkingwithDelegatesMadeEasierwithC#2.0一文。简要说来就是C#编译器自动将匿名函数代码转移到一个自动命名函数中,将原来需要用户手工完成的工作自动完成。例如构造一个私有静态函数,如
以下为引用:
class AClass {
static void CallbackWithoutNewingADelegateObject() {
ThreadPool.QueueUserWorkItem(delegate(Object obj) { Console.WriteLine(obj); }, 5);
}
}
被编译器自动转换为
以下为引用:
class AClass {
static void CallbackWithoutNewingADelegateObject() {
ThreadPool.QueueUserWorkItem(new WaitCallback(__AnonymousMethod$00000002), 5);
}
private static void __AnonymousMethod$00000002(Object obj) {
Console.WriteLine(obj);
}
}