Це набагато коротша форма позначення методу. Наступні приблизно еквівалентні:
int MyFunc(int pParam) {
return pParam;
}
Func<int, int> MyFunc = delegate (int pParam) { return pParam; };
Func<int, int> MyFunc = x => x;
int MyFunc(int pParam) =>
pParam;
Подумайте про лямбда-вираз, як про те, що він сказав: "щось дано, щось повернути". У наведеному вище прикладі лямбда-вираз x => x
говорить "задано х, повернути х", хоча лямбда-вирази не обов'язково повинні щось повертати, і в цьому випадку ви можете прочитати їх як "дано х, зробіть щось із х".
Також зверніть увагу, що є три речі, які називаються "делегат", і які спочатку можуть дуже заплутати.
Анонімний метод використовує delegate
ключове слово, але визначає метод без імені:
Func<int, int> = delegate (int x) { return x; };
Присвоєння методу (анонімного, явного або лямбда-посилання) посилання викликає створення прихованого Delegate
обгорткового об'єкта, що дозволяє посилатися на метод. (В основному це свого роду "вказівник керованої функції".)
А потім ви також можете оголосити підписи іменованих методів, використовуючи також delegate
ключове слово:
public delegate int TestFunc(int x, int y);
TestFunc myFunc = delegate (int x, int y) { return x + y; };
Це оголошує іменований підпис, TestFunc
який займає два int
s і повертає int
, а потім оголошує посилання делегата того типу, якому потім призначається анонімний метод із відповідним підписом.