使用匿名方法
上一個示例非常直觀。其中創建了一個單獨的函數,並對其進行了委托引用,每當調用此委托時,程序都會調用該函數。在該函數中,執行了一系列的可執行步驟。使用匿名方法,程序無需為該類創建整個新方法,而可以直接引用委托中包含的可執行步驟。匿名方法的聲明方法是先實例化一個委托,然後在實例化語句之後加上一對表示執行范圍的花括號,最後加上一個用於終止語句的分號。
在以下示例中,程序修改委托創建語句以直接修改列表框,而不是引用代表程序來修改該列表框的函數。存儲代碼的目的是為了修改委托創建語句之後的執行范圍中的列表框。
public class MyForm
{
ListBox listBox;
TextBox textBox;
Button button;
public MyForm()
{
listBox = new ListBox(...);
textBox = new TextBox(...);
button = new Button(...);
button.Click += new EventHandler(sender, e)
{
listBox.Items.Add(textBox.Text);
};
}
}
請注意,“匿名”方法中的代碼是如何訪問和處理其執行范圍以外聲明的變量的。實際上,匿名方法可以引用由類和參數聲明的變量,也可以引用所在方法聲明的局部變量。
向匿名方法傳遞參數
有趣的是,“匿名”方法語句包含兩個參數,即 sender 和 e。查看 Button 類的 Click 委托的定義,您會發現委托引用的任何函數都必須包含兩個參數,第一個參數為對象類型,第二個參數為 EventArgs 類型。在第一個示例中,程序未使用“匿名”方法,而是向 AddClick 方法傳遞了兩個參數,類型分別為對象和 EventArgs。
即使以內聯方式編寫此代碼,委托仍必須接收兩個參數。在“匿名”方法中,必須聲明兩個參數的名稱,這樣關聯的代碼塊才能使用它們。當觸發按鈕上的 Click 事件時,將調用“匿名”方法並將相應的參數傳遞給該方法。