Лямбда - это анонимная функция.Так что в вашем случае ret
является параметром функции.
Когда вы говорите
Func<int, int> myFunc = (f) => f + 1;
Вы определяете анонимную функцию, которая принимает int и возвращает его + 1.Вы храните ссылку на анонимную функцию в ссылке myFunc
.Эта функция не выполнена, она только что была определена.Позже вы можете вызывать функцию всякий раз, когда захотите:
int a = myFunc(4); // a becomes 5
Action<T>
- это делегат, который возвращает void и обычно указывает на лямбду, такую как ваша.Func<T1, T2>
- это делегат, который принимает T1
и возвращает T2
, а также обычно указывает на лямбду.Есть другие делегаты, определенные для других методов, которые принимают больше параметров, таких как Func<T1, T2, T3>
и Action<T1, T2>
В вашем случае вы передаете Decorator две анонимные функции.Когда он сочтет это необходимым, он вызывает их для выполнения некоторой работы и использует возвращаемое значение для дальнейшей работы.