Изменение способа работы функции
Привет Гуру Кодового Проекта
Я знаю, что делегаты могут работать со значениями, которые известны в момент вызова делегата - это просто параметр
напр.
Func<double, double> areaOfCircle = r => Math.PI * Math.Pow(r, 2); Func<double, double> diameterOfCircle = r => 2 * Math.PI * r; var iNeed = diameterOfCircle; // ----------------------------- Console.WriteLine(iNeed(5)); // output is 31.4159265358979 Console.WriteLine(iNeed(10)); // 62.8318530717959 iNeed = areaOfCircle; // --------------------- Console.WriteLine(iNeed(5)); // output is 78.5398163397448 Console.WriteLine(iNeed(10)); // 314.159265358979
Мне интересно, существует ли какой-либо способ динамического создания делегатов, чтобы каждый делегат работал с использованием значений, которые известны во время выполнения при создании делегата (а не при вызове делегата).
Итак, используя приведенный выше пример, есть ли способ сказать areaOfCircle использовать какой-то другой фактор, а не pi? Что-то похожее на
Func<double, double> areaOfCircle = r => ::factor:: * Math.Pow(r, 2); Func<double, double> diameterOfCircle = r => 2 * ::factor:: * r; var iNeed = diameterOfCircle(factor::3); // ---------------------------------------- Console.WriteLine(iNeed(5)); // output is 30 Console.WriteLine(iNeed(10)); // 60 iNeed = areaOfCircle(factor::3.14); // ----------------------------------- Console.WriteLine(iNeed(5)); // output is 78.5 Console.WriteLine(iNeed(10)); // 314
Опять же, я знаю, что простой пример, подобный этому, легко разрешим, передав фактор каждой функции в консоли.WriteLine звонит. Но вместо этого представьте, что присвоение iNeed и вызовы iNeed происходят в отдельных методах или даже классах; что как только iNeed присваивается, он передается в качестве возвращаемого значения вызывающему классу, который вставляет его в список, который вызывается другим классом для выполнения функции... нормальные, повседневные вещи.
То, что я ищу, - это способ настроить функции для работы с определенным фактором, когда выполняется назначение iNeed. Разве такое возможно?
Что я уже пробовал:
Поиск в сети.
Чтение документации MS по делегатам, анонимным делегатам, динамическим переменным и т. д.