Что это за событие?
Может кто-нибудь объяснить, что делает этот код С#?
// 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 предоставляет гораздо больше.