Страницы

Поиск по вопросам

среда, 19 декабря 2018 г.

Зачем нужен встроенный делегат Func?

При решении очередной проблемы опять сталкнулся со встроенным делегатом Func. Никак не могу понять его предназначение, как он работает и как устроен. Может кто-то на каком-то простом примере объяснить что это, для чего используется, как это работает и как этим пользоваться?


Ответ

Допустим мы имеем метод, который рисует графики различных функций, для простоты - алгебраических, вида y=f(x). Нашему методу все равно какую именно функцию данного вида рисовать, главное чтобы вид функции совпадал с заданным. тогда мы можем определить наш метод следующим образом:
public void DrawFunc(Func f) { for(double x = 0.0; x<1.0; x+=0.001) { double y = f(x); //и далее рисуем точки графика } }
Теперь для отрисовки графика нам нужно вызвать наш метод и передать ему подходящую функцию. Для Func< double, double> нам подойдет любая функция вида double FuncName(double ParamName), например Math.Sin. Вызов будет выглядеть так:
DrawFunc(Math.Sin);
Данный делегат, как и аналогичный ему Action используется в основном для быстрого объявления делегатов стандартного вида. Определено несколько отдельных делегатов вида Func< T1,...,T16,TResult>, и Action< T1,...,T16> которые могут принимать до 16-ти параметров (.NET 4+, до 4-х для .NET 3.5), типы которых указываются при объявлении. Кроме этого для Func необходимо указать тип возвращаемого значения TResult, у Action возвращаемое значение всегда void. Больше ничем от обычных делегатов они не отличаются.
тут уже обсуждалась очень похожая тема и есть еще немного информации

Комментариев нет:

Отправить комментарий