Делегаты, Lambdas, Action, Func, Анонимные Функции - PullRequest
5 голосов
/ 25 ноября 2010

Я просто хочу проверить мое понимание о следующем

  • Делегат - подпись метода
  • Lambdas - анонимная функция
  • анонимная функция - только это
  • действие - анонимная функция, которая ничего не возвращает
  • Func -Анонимная функция, которая возвращает что-то

хмм ... все они делают схожие вещи, как вы определяете и знаете, когда их использовать?

извините, я не очень хорошо объясняю

Ответы [ 3 ]

9 голосов
/ 25 ноября 2010
  • Делегат - это не сигнатура метода.It is a type which encapsulates a method.Следовательно, объявление делегата должно иметь подпись, аналогичную методу, который он хочет инкапсулировать.When to use Delegate - whenever you want to pass a method to another function. Подробнее см. это и это .

  • Lambdas - сокращение и более выразительный способ написанияанонимная функция.Но это еще не все.Лямбда-выражение также можно преобразовать в дерево выражений.Подробнее см. это .

  • анонимная функция - да .. просто так

  • Действие - это делегат, который может инкапсулировать функцию, которая ничего не возвращает.Поэтому вы должны думать о нем как о a type that can encapsulate an action и использовать его, когда вам нужно передать действие.

  • Func - делегат, который может инкапсулировать функцию, котораявозвращает что-тоНо вы должны смотреть на него как a type that can encapsulate a transformation и использовать, когда хотите обойти преобразование.

4 голосов
/ 25 ноября 2010

Действие и Функ - это просто особые случаи Делегат .Сам делегат - это то, что ссылается на метод и может использоваться для его вызова.

3 голосов
/ 25 ноября 2010

Не пытайтесь увидеть C # + эти функции.Кроме того, потому что нет строгого прагматического ответа на ваш вопрос.

Начните с точки зрения функционального программирования, например, попробуйте изучить F #, чтобы понять, что и когда используются лямбды (фактически везде внутри функционального языка).) и тогда вы поймете вещи лучше.

Это откроет ваш разум и заставит вас по-другому взглянуть на императивное программирование или смешанные языки, такие как C #.

...