Кто-то мог объяснить, что делает этот код 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)
?
Прикрепить обработчики событий можно тремя разными способами:
Старый многословный способ:
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();
}
Как уже упоминалось, синтаксис, который вы видите, является лямбда-выражением. Код, который у вас есть в упрощенном виде, является сокращением для следующего
this.MouseLeftButtonUp += Handle_MouseLeftButtonUp;
void Handle_MouseLeftButtonUp(object s, MouseButtonEventArgs e)
{
new CameraCaptureTask().Show();
}
. Проверьте ссылки, которые дали другие, лямбда-выражения предоставляют гораздо больше.
Лямбда-нотация, s
означает sender
, e
означает eventargs
, аргументы события.
(s, e) => new CameraCaptureTask().Show();
Это анонимный делегат (лямбда-выражение). Он принимает 2 параметра (s
и e
(которые не используются)), а затем создает новую CameraCaptureTask и показывает ее.
(s, e) => { }
- это лямбда-выражение. В данном случае это просто быстрый способ определения метода (встроенного метода) без необходимости создавать отдельный метод в классе.