第一个代码是第二个代码的简写:
itemCountLines.Click = itemCountLines.Click + (sender, args) => countLines();
itemCountLines.Click += (sender, args) => CountLines();
但我不明白这个表达是做什么的。任何人都请向我解释
答案 0 :(得分:4)
此代码为Control.Click
事件添加处理程序:
public event EventHandler Click
其中EventHandler
是类型的委托:
public delegate void EventHandler(
object sender,
EventArgs e
)
通常,假设你有一个具有相同签名的方法:
void SomeClickHandler(object sender, EventArgs e)
{
CountLines();
}
你会添加这个处理程序来处理Click
事件:
itemCountLines.Click += SomeClickHandler;
运营商+=
是可能的,因为Click
是event
,因此您可以向其添加或删除多个EventHandler
。简单来说,点击一些控件后,您可能想要进行多个操作(显示其他控件,将其记录到数据库等),这样您就可以添加多个事件处理程序。您甚至可以稍后在某个地方itemCountLines.Click -= SomeClickHandler
说,您不想再使用Click
来处理SomeClickHandler
。
但是上面的代码需要定义方法SomeClickHandler
,这有时是不必要的(例如,它在整个类中只使用一个)。然后,您可以使用匿名委托(在C#2.0中添加):
itemCountLines.Click += delegate(object sender, EventArgs args)
{
CountLines();
};
但您可以使用 lambda expression (在C#3.0中添加)进一步缩短此语法:
itemCountLines.Click += (sender, args) => CountLines();
答案 1 :(得分:0)
它只是向侦听器列表itemCountLines.Click = itemCountLines.Click + (sender, args)
添加一个事件,因此当事件发生时,将通知发件人实例在内联=> countLines();
时引发事件,因为您正在使用lambda Expression {{1} }将调用=>
方法
答案 2 :(得分:0)
你只是在Click
附加一个事件,它与说
itemCountLines.Click += CountLines(sender, args);
在某个地方,应该有这样的方法:
private void CountLines()
{
// Some Code There
}