C# 使用+;=带lambda算子的算子

C# 使用+;=带lambda算子的算子,c#,lambda,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",

我有以下代码:

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
是tappes的事件侦听器。但是,我不明白以下几点:

1) 为什么他们使用
+=
操作符来添加lambda函数。如何添加这样的lambda函数?我一直在基元类型上使用
+=

2) “args”来自哪里


3) lambda函数什么时候运行?

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

这里的要点不是lambda方法,而是事件并向其注册代理。它允许
+=
操作员订阅更多事件侦听器。
Tapped
属性是一个事件(请参见下面的链接)

+=
操作员的文档中:

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

args来自哪里?

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

lambda函数何时运行?

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


我建议你看看: 更一般地说


还可以查看MSDN和

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

这里的要点不是lambda方法,而是事件并向其注册委托。它要求
+=
操作员订阅更多事件侦听器。
点击的
属性是一个事件(见下面的链接)

+=
操作员的文档中:

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

args来自哪里?

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

lambda函数何时运行?

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


我建议你看看: 更一般地说


还可以查看MSDN和

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

函数void myEvent(对象o,事件args args){};
识别器.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是所有事件所需的事件处理程序定义的一部分。基本上,它是一个lambda事件侦听器。而不是将其定义为如下函数:

函数void myEvent(对象o,事件args args){};
识别器.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;


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

这不是添加lambda函数。
+=
是添加事件侦听器的语法。lambda可以是事件侦听器,只要它接受事件的arguments@PanagiotisKanavos是数组吗?+=运算符如何允许此操作?因此它是add将函数用作事件侦听器。它是一个事件,而不是数组。
+=
是用于将事件侦听器添加到事件的语法。。这也不是新语法,我认为这是从.NET 1.0开始的。值得注意的是,您混合了两个概念。第一个是事件注册,第二个是lambda表达式。它不是要求事件订阅lambda表达式,您可以同样轻松地提供签名与预期匹配的方法的名称,在这种特定情况下,该方法是一个无效方法,只接受一个参数。@Pablo-下面的答案有助于您解决问题吗?这不是添加lambda函数。
+=
is添加事件侦听器的语法。lambda可以是事件侦听器,只要它接受事件的arguments@PanagiotisKanavos是数组吗?+=运算符如何允许此操作?因此它添加了一个函数作为事件侦听器。它是一个事件,而不是数组。
+=
是用于将事件侦听器添加到事件的语法。。这也不是新的语法,我认为这是从.NET 1.0开始提供的。值得注意的是,您混合了两个概念。第一个是事件注册,第二个是lambda表达式。事件订阅lambda表达式并不是一个要求,您可以很容易地提供一个方法的名称,该方法的签名与应该是,在这个特定的例子中,哪一个是一个void方法,它只接受一个参数。@Pablo-下面的答案有助于解决这个问题吗?