不熟悉的声明

时间:2014-04-06 22:54:02

标签: c# opentk

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

我的“榜样”

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

在模板中

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

参数被添加到某个东西并且都大于块?

2 个答案:

答案 0 :(得分:4)

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

lambda具有以下形式:[parameters] => {码}。花括号是可选的;如果lambda只有一个语句,你就不需要它们。类似地,参数周围的parens是可选的,只需要多个参数。如果编译器可以推断它们,则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;

答案 1 :(得分:1)

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

(sender, e)是参数,它们的类型是根据您指定的委托的签名推断出来的。也就是说..如果你想知道它们是什么,你必须检查Load类型上Game事件的定义。