2010-05-16 66 views
15

有人可以解釋這個C#代碼在做什麼?這個活動是什麼?

// launch the camera capture when the user touch the screen 
this.MouseLeftButtonUp += (s, e) => new CameraCaptureTask().Show(); 

// this static event is raised when a task completes its job 
ChooserListener.ChooserCompleted += (s, e) => 
{ 
    //some code here 
}; 

我知道CameraCaptureTask是一類,具有一個公共方法展()。這是什麼樣的事件?什麼是(s, e)

回答

15

當安裝事件處理程序,您可以用三種不同的方式做:

老式的詳細方式:

this.MouseLeftButtonUp += Handle_MouseLeftButtonUp; 
void Handle_MouseLeftButtonUp(object s, MouseButtonEventArgs e) 
{ 
    new CameraCaptureTask().Show(); 
} 

anonymous method

this.MouseLeftButtonUp += delegate(object s, MouseButtonEventArgs e) { 
    new CameraCaptureTask().Show(); 
} 

或者,使用lambda expression

this.MouseLeftButtonUp += (s, e) => new CameraCaptureTask().Show(); 

想象一下使用委託人的最後一個「緊湊形式」。你也可以使用大括號:

this.MouseLeftButtonUp += (s, e) => { 
    new CameraCaptureTask().Show(); 
} 
+0

甚至更​​老的時尚沒有Handle_MouseLeftButtonUp的類型推斷; – 2011-08-18 21:55:15

12
(s, e) => new CameraCaptureTask().Show(); 

這是一個匿名代表(lambda expression)。這需要2個參數(se(未使用)),然後創建一個新的CameraCaptureTask並顯示它。

1
(s, e) => { } 

lambda expression。在這種情況下,它只是一種定義方法(內聯方法)的快速方法,無需在類中創建單獨的方法。

2

Lambda表示法s表示sender,e表示事件的參數爲eventargs

0

如上所述,您看到的語法是lambda表達式。你在一個簡單的觀點具有的代碼是一個短手以下

this.MouseLeftButtonUp += Handle_MouseLeftButtonUp; 

void Handle_MouseLeftButtonUp(object s, MouseButtonEventArgs e) 
{ 
    new CameraCaptureTask().Show(); 
} 

檢查別人給予的參考文獻,Lambda表達式提供更多。