有人可以解释这个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 是一个类,并且有一个公共方法 Show()。这是什么样的事件?什么是(s, e)
?
答案 0 :(得分:15)
附加事件处理程序时,您可以通过三种不同的方式进行操作:
老式的冗长方式:
this.MouseLeftButtonUp += Handle_MouseLeftButtonUp;
void Handle_MouseLeftButtonUp(object s, MouseButtonEventArgs e)
{
new CameraCaptureTask().Show();
}
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();
}
答案 1 :(得分:12)
(s, e) => new CameraCaptureTask().Show();
这是一个匿名代表(lambda expression)。这需要2个参数(s
和e
(未使用)),然后创建一个新的CameraCaptureTask并显示它。
答案 2 :(得分:2)
Lambda表示法,s
代表sender
,e
代表eventargs
,即事件的参数。
答案 3 :(得分:1)
(s, e) => { }
是lambda expression。在这种情况下,它只是一种快速定义方法(内联方法)的方法,而无需在类中创建单独的方法。
答案 4 :(得分:0)
如前所述,您看到的语法是lambda表达式。您在简单视图中拥有的代码是以下
的简写this.MouseLeftButtonUp += Handle_MouseLeftButtonUp;
void Handle_MouseLeftButtonUp(object s, MouseButtonEventArgs e)
{
new CameraCaptureTask().Show();
}
检查其他人提供的引用,Lambda表达提供了更多。