使用带有lambda运算符的+ =运算符

时间:2017-11-14 18:21:50

标签: c# lambda

我有以下代码:

recognizer = new GestureRecognizer();
recognizer.Tapped += (args) =>
{
    // Send an OnSelect message to the focused object and its ancestors.
    if (FocusedObject != null)
    {
        FocusedObject.SendMessageUpwards("OnSelect", 
            SendMessageOptions.DontRequireReceiver);
    }
};

我正在Unity的一个项目中工作,我对这个操作的语法没有经验:

recognizer.Tapped += (args) =>
{
    // Send an OnSelect message to the focused object and its ancestors.
    if (FocusedObject != null)
    {
        FocusedObject.SendMessageUpwards("OnSelect", 
            SendMessageOptions.DontRequireReceiver);
    }

我理解Tapped是点按的事件监听器。但是,我不明白以下事项:

1)为什么他们使用+=运算符来添加lambda函数。你怎么能添加这样的lambda函数?我总是在原始类型上使用+=

2)“args”来自哪里?

3)该lambda函数何时运行?

2 个答案:

答案 0 :(得分:4)

为什么他们使用+ =运算符来添加lambda函数?

这里的要点是 lambda方法,而事件并注册委托给它。 +=运算符overrloads订阅更多事件侦听器。 Tapped属性是一个事件(请参阅下面的链接)。

来自+=运营商的文档:

  

+ =运算符还用于指定将响应事件而调用的方法;这种方法称为事件处理程序。在此上下文中使用+ =运算符称为订阅事件。

“args”来自哪里?

当事件触发时,它会触发一个参数(在Tapped定义的特定情况下。当它发生时,它将此参数传递给所有事件监听器。

该lambda函数何时运行?

每当触发事件并导致调用所有侦听器时。其中之一就是这种lambda方法。

我建议看看:How to: Subscribe to and Unsubscribe from Events 更多关于events

的更多信息

另请查看MSDN上的Delegates and Events+= operator with Events

答案 1 :(得分:0)

基本上,它是一个lambda事件监听器。而不是将其定义为如下函数:

function void myEvent(object o, EventArgs args){}; recognizer.Tapped += myEvent;

它在同一个地方定义和分配。

使用+ =的原因是因为您可以将多个事件处理程序分配给同一事件,如下所示:

function void myEvent(object o, EventArgs args){};
function void yourEvent(object o, EventArgs args){};
recognizer.Tapped += myEvent;
recognizer.Tapped += yourEvent;

如果你想删除指定的事件,你可以使用 - =像这样:

recognizer.Tapped -= myEvent;

args是所有事件所需的事件处理程序定义的一部分