2014-01-12 54 views
1

第一個碼是第二速記符號:描述.NET的簡寫符號的含義(「+ =」,「=>」)

itemCountLines.Click = itemCountLines.Click + (sender, args) => countLines(); 


itemCountLines.Click += (sender, args) => CountLines(); 

,但我不理解這種表達是doing.Anybody請解釋給我聽

+2

查找匿名方法和lambda表達式。 http://msdn.microsoft.com/en-us/library/0yw3tz5k.aspx –

回答

4

該代碼將一個處理器的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(); 
+0

「+ =」是什麼意思?我們在itemcountlines.click中添加了一些點擊處理程序。這沒有意義 – Khalsa

+0

它非常有意義。 'Click'是'event',它可以添加和刪除'EventHandler'。 –

+0

所以我們添加這個處理程序(sender,args)來點擊event來知道sender和argumnets然後調用countLines函數吧? – Khalsa

0

它只是那麼在事件發生時發送者的實例將被通知與您使用lambda表達式=>引發事件直列=> countLines();的事件添加到聽衆的列表,它將調用countLines方法

0

你「再只是Click附加一個事件,它是等於說

itemCountLines.Click += CountLines(sender, args); 

索姆其中應該有這樣的方法:

private void CountLines() 
{ 
    // Some Code There 
}