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-下面的答案有助于解决这个问题吗?