Что такое делегат func? - PullRequest
       3

Что такое делегат func?

2 голосов
/ 04 сентября 2010

Когда я запускаю эти 2 строки кода, я получаю то, что ожидаю:

Func<int, int> sqr = x => x * x;
Console.WriteLine(sqr(3)); 

Но я не понимаю, почему возвращение указывается в качестве второго аргумента?Как все это работает?Когда вы определяете делегат, он должен быть:

return-type delegate delName (parameters);

Однако, с делегатом Func, тип возвращаемого значения также указывается в качестве входного аргумента.Кто-нибудь может объяснить мне, как все это работает?И если возможно, напишите небольшой пример, используя ту же концепцию указания типа возвращаемого значения, что и входной параметр.Мне очень трудно понять, что происходит под капотом.

Заранее спасибо:)

Ответы [ 3 ]

3 голосов
/ 04 сентября 2010

Полное объявление для System.Func, о котором вы говорите:

public delegate TResult Func<T, TResult>(T arg)

Итак, когда вы делаете

Func<int, int> sqr = x => x * x;

Вы объявляете метод с использованием лямбда-выражения, которое принимаетint x и возвращает x * x.Так что сейчас sqr содержит ссылку на ваш метод.И в следующей строке

Console.WriteLine(sqr(3)); 

Вы фактически выполняете метод и показывает вывод.

2 голосов
/ 04 сентября 2010

Эрик Липперт сделал хорошую статью на эту тему

Я рекомендую вам прочитать статью, но суть статьи в том, что причинавозвращаемое значение появляется справа в том, что это наиболее естественная позиция для него.Это естественный выбор для английского языка, математики и функций высшего порядка.C # имеет тип возврата первым по историческим причинам.

0 голосов
/ 04 сентября 2010

Это не «входной параметр», это Generics

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...