2014-04-06 4 views
1

Недавно я работал с OpenTK для создания небольших симуляций, и все работает отлично. Единственный вопрос, который у меня есть, заключается в том, что заявление незнакомо, и я никогда не видел его во всем своем опыте программирования. Я знаю функциональность оператора, но я не понимаю структуру.Непонятное заявление

Мой «пример»

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

В шаблоне

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

Параметр добавляется к чему-то, и все больше, чем блок?

+2

Это выражение лямбда. – Casey

ответ

4

Это выражение лямбда, которое по сути является анонимной функцией. Обратите внимание на «=>» против больше или равно («> =»). Оператор => обычно читается как «идет».

Лямбда имеет следующую форму: [parameters] => {code}. Фигурные фигурные скобки необязательны; вам не нужны они, если лямбда имеет только одно утверждение. Аналогично, parens вокруг аргументов являются необязательными и необходимы только для нескольких аргументов. Типы аргументов для лямбда необязательны, если компилятор может их вывести. Вот некоторые примеры различных способов выразить простой лямбда, который добавляет 2 значения:

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# использует оператор + =. Добавляя лямбда-функцию к событию, мы подписываемся на то, что эта функция называется при срабатывании события. Аналогичным образом, мы могли бы подписаться на обычную функцию для события:

private void OnLoad(object sender, EventArgs e) { ... } 

... 

game.Load += this.OnLoad; 
1

Их называют Анонимными методами. => является лямбдой и теперь является предпочтительным способом создания анонимных методов.

(sender, e) являются аргументами, и их типы выводятся на основании подписи делегата, которому вы назначаете. То есть .. если вы хотите знать, что это такое, вы должны проверить определение события Load на Game.

Смежные вопросы