Что это за событие?

Может кто-нибудь объяснить, что делает этот код С#?

// 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)?

Ответы

Ответ 1

При подключении обработчиков событий вы можете выполнять три разных способа:

Старомодный многословный способ:

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

An анонимный метод:

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

Или, используя выражение lambda:

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

Представьте себе последнюю, как "компактную форму" той, которая используется делегатом. Вы также можете использовать фигурные скобки:

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

Ответ 2

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

Это анонимный делегат (выражение лямбда). Это занимает 2 параметра (s и e (которые не используются)), а затем создайте новую CameraCaptureTask и покажите ее.

Ответ 3

Лямбда-нотация, s означает sender, e для eventargs, аргументы события.

Ответ 4

(s, e) => { }

является выражением лямбда. В этом случае это просто быстрый способ определения метода (встроенный метод) без необходимости создания отдельного метода в классе.

Ответ 5

Как уже упоминалось, синтаксис, который вы видите, является выражением лямбда. Код, который у вас есть в упрощенном виде, является короткой рукой для следующих

this.MouseLeftButtonUp += Handle_MouseLeftButtonUp;

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

Проверьте ссылки, предоставленные другими, выражение Lambda предоставляет гораздо больше.