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);
}
}