2010-11-25 3 views
4

Я просто хочу, чтобы проверить мое понимание о следующемДелегаты, Лямбда, Action, Func, анонимные функции

  • делегатом - сигнатуры метода
  • Лямбда - анонимная функция
  • Anonymous Функция - только это
  • Действие - анонимная функция, которая возвращает ничего
  • Func - анонимная функция, которая возвращает что-то

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

извините, я не объяснить, а

+1

Это настолько широкий, что любая попытка ответить на этот вопрос вызовет массу вопросов. Прочитайте основы, и скорее задайте вопрос, когда вы действительно сталкиваетесь с проблемой или имеете вопрос относительно конкретного использования этого. – 2010-11-25 09:06:25

ответ

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

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

  • Anonymous Функция - да .. только что

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

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

+0

Мне интересно, почему я не могу передать делегат вместо `Action` или` Func`. – 2010-11-25 09:29:31

3

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

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

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

+1

Я посмотрел некоторые видео F #, очень интересные esp. [тот, что был Лука Болоньезе] (http://channel9.msdn.com/blogs/pdc2008/tl11) @ PDC08. Но я на самом деле не очень много, потом я переставал смотреть на них, может быть, мне следует снова взглянуть на них @ – 2010-11-25 09:28:25

3

Action и Func лишь частные случаи Delegate. Делегирование - это то, что ссылается на метод и может быть использовано для его вызова.

Смежные вопросы