【发布时间】:2017-11-14 18:21:50
【问题描述】:
我有以下代码:
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 函数什么时候运行?
【问题讨论】:
-
这不是添加 lambda 函数。
+=是添加事件侦听器的语法。只要 lambda 接受事件的参数,它就可以成为事件侦听器 -
@PanagiotisKanavos 被窃听了一个数组? += 运算符如何允许这样做?所以它正在添加一个函数来充当事件监听器。
-
这是一个事件,而不是一个数组。
+=是用于向事件添加事件侦听器的语法。 It's explained in the docs。这也不是新语法,我认为这是从 .NET 1.0 开始可用的 -
值得注意的是,您混合了两个概念。第一个是事件注册,第二个是 lambda 表达式。事件订阅 lambda 表达式不是必需的,您可以轻松地提供签名与预期匹配的方法的名称,在这种特定情况下,它是一个 void 方法,它接受单个参数。
-
@Pablo - 以下任何答案是否有助于您解决问题?