陌生的语句

本文关键字:语句 | 更新日期: 2023-09-27 17:57:06

我最近与OpenTK合作创建了小型模拟,一切都运行良好。我唯一的问题是语句是不熟悉的,在我的整个编程经验中我从未见过它。我知道语句的功能,但我不了解结构。

我的"例子"

Something += (parameter) =>
{
     block goes here
}

在模板中

game.Load += (sender, e) =>
{
     game.VSync = VSyncMode.On;
};

参数被添加到某物中并且都大于块?

陌生的语句

这是一个 lambda 表达式,本质上是一个匿名函数。请注意"=>"与大于或等于 (">=")。=>运算符通常读作"go to"。

lambda 具有以下形式:[参数] => {代码}。花括号是可选的;如果 lambda 只有一个语句,则不需要它们。同样,参数周围的括号是可选的,只有多个参数才需要。如果编译器可以推断 lambda 的参数类型,则它们是可选的。以下是表达添加 2 个值的简单 lambda 的不同方法的一些示例:

Func<int, int, int> add = (int a, int b) => { return a + b; }
Func<int, int, int> add = (a, b) => { return a + b; } // parameter types inferred
Func<int, int, int> add = (a, b) => a + b; // curly braces optional

这里发生的另一件事是事件订阅,它在 C# 中使用 += 运算符。通过向事件添加 lambda 函数,我们订阅了在事件触发时调用该函数。类似地,我们可以为事件订阅一个普通函数:

private void OnLoad(object sender, EventArgs e) { ... }
...
game.Load += this.OnLoad;

它们被称为匿名方法。=> 是一个 lambda,现在是创建匿名方法的首选方法。

(sender, e)是参数,其类型是根据要分配给的委托的签名推断的。也就是说..如果想知道它们是什么,则必须在Game类型上检查Load事件的定义。