Каково это событие?

Кто-то мог объяснить, что делает этот код 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
задан Matt Lacey 7 August 2010 в 00:20
поделиться

5 ответов

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

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

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

Анонимный метод :

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

Или, используя лямбда-выражение :

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

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

this.MouseLeftButtonUp += (s, e) => {
  new CameraCaptureTask().Show(); 
}
15
ответ дан 1 December 2019 в 02:10
поделиться

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

this.MouseLeftButtonUp += Handle_MouseLeftButtonUp;

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

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

0
ответ дан 1 December 2019 в 02:10
поделиться

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

2
ответ дан 1 December 2019 в 02:10
поделиться
(s, e) => new CameraCaptureTask().Show();

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

12
ответ дан 1 December 2019 в 02:10
поделиться
(s, e) => { }

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

1
ответ дан 1 December 2019 в 02:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: