第一個碼是第二速記符號:描述.NET的簡寫符號的含義(「+ =」,「=>」)
itemCountLines.Click = itemCountLines.Click + (sender, args) => countLines();
itemCountLines.Click += (sender, args) => CountLines();
,但我不理解這種表達是doing.Anybody請解釋給我聽
第一個碼是第二速記符號:描述.NET的簡寫符號的含義(「+ =」,「=>」)
itemCountLines.Click = itemCountLines.Click + (sender, args) => countLines();
itemCountLines.Click += (sender, args) => CountLines();
,但我不理解這種表達是doing.Anybody請解釋給我聽
該代碼將一個處理器的Control.Click
事件:
public event EventHandler Click
其中EventHandler
是類型的委託:
public delegate void EventHandler(
object sender,
EventArgs e
)
通常情況下,給你具有相同簽名的方法:
void SomeClickHandler(object sender, EventArgs e)
{
CountLines();
}
您將添加此處理程序來處理Click
事件:
itemCountLines.Click += SomeClickHandler;
操作+=
是可能的,因爲Click
是一個event
,這樣你就可以添加或刪除多個EventHandler
s到它。簡單地說,點擊一些控件後,您可能需要執行多個操作(顯示其他控件,將其記錄到數據庫等),以便您可以添加多個事件處理程序。你甚至可以在稍後的某個地方做itemCountLines.Click -= SomeClickHandler
說,你不想再用SomeClickHandler
來處理Click
。
但是,上面的代碼需要定義方法SomeClickHandler
有時是不必要的(例如,它只用於整個班級)。然後你可以使用匿名委託(添加在C#2.0):
itemCountLines.Click += delegate(object sender, EventArgs args)
{
CountLines();
};
,但你可以進一步縮短這句法與lambda表達式(添加在C#3.0)到:
itemCountLines.Click += (sender, args) => CountLines();
它只是那麼在事件發生時發送者的實例將被通知與您使用lambda表達式=>
引發事件直列=> countLines();
的事件添加到聽衆的列表,它將調用countLines
方法
你「再只是Click
附加一個事件,它是等於說
itemCountLines.Click += CountLines(sender, args);
索姆其中應該有這樣的方法:
private void CountLines()
{
// Some Code There
}
查找匿名方法和lambda表達式。 http://msdn.microsoft.com/en-us/library/0yw3tz5k.aspx –