Каково различие между анонимными методами (C# 2.0) и лямбда-выражения (C# 3.0)? [дубликат]

Конструктор по умолчанию создается, если вы не определяете каких-либо конструкторов в своем классе. Это просто конструктор без аргументов, который ничего не делает. Изменить: кроме вызова super ()

public Module(){
}
41
задан Vinko Vrsalovic 16 October 2008 в 23:44
поделиться

4 ответа

страница MSDN на анонимных методах объясняет его

В версиях C# прежде 2.0, единственный способ объявить, что делегат должен был использовать названные методы. C# 2.0 представил анонимные методы и в C# 3.0 и позже, лямбда-выражения заменяют анонимные методы как предпочтительный способ записать встроенный код. Однако информация об анонимных методах в этой теме также относится к лямбда-выражениям. Существует один случай, в котором анонимный метод обеспечивает функциональность, не найденную в лямбда-выражениях. Анонимные методы позволяют Вам опустить список параметров, и это означает, что анонимный метод может быть преобразован в делегатов со множеством подписей. Это не возможно с лямбда-выражениями. Для получения дополнительной информации конкретно о лямбда-выражениях, посмотрите Лямбда-выражения (Руководство по программированию C#).

И относительно лямбда-выражений :

лямбда-выражение А является анонимной функцией, которая может содержать выражения и операторы, и может использоваться для создания типов дерева выражений или делегатов. Все лямбда-выражения используют оператор лямбды =>, который читается, поскольку "переходит в". Левая сторона оператора лямбды определяет входные параметры (если таковые имеются), и правая сторона содержит выражение или блок операторов. Лямбда-выражение x => x * x читается "x, переходит к x временам, x." Этих выражений могут быть присвоены типу делегата следующим образом:

28
ответ дан Brian R. Bondy 23 September 2019 в 15:10
поделиться
  1. Лямбда-выражения могут быть преобразованы в делегатов или деревья выражений (с некоторыми ограничениями); анонимные методы могут только быть преобразованы в делегатов
  2. , Лямбда-выражения позволяют вывод типа на параметрах:
  3. Лямбда-выражения позволяют телу быть усеченным только к выражению (для возврата значения) или отдельный оператор (в других случаях) без фигурных скобок.
  4. Лямбда-выражения позволяют списку параметров быть сокращенным только к названию параметра, когда тип может быть выведен и когда существует только единственный параметр
  5. , Анонимные методы позволяют списку параметров быть опущенным полностью, когда это не используется в теле, и это не приводит к неоднозначности

, последняя точка является единственным преимуществом анонимных методов по лямбдам, я верю. Полезно создать подобное полю событие ни с какой-op подпиской хотя:

public event EventHandler Click = delegate{};
28
ответ дан Jon Skeet 23 September 2019 в 15:10
поделиться

Во-первых, удобство: лямбды легче читать и записать.

118-секундный, выражения: лямбды могут быть скомпилированы в или делегат, или дерево выражений (Expression<T> для некоторого типа делегата T, такой как Func<int,bool>). Деревья выражений являются более захватывающим, поскольку это - ключ к LINQ к хранилищам данных из процесса.

Func<int,bool> isEven = i => i % 2 == 0;
Expression<Func<int,bool>> isEven = i => i % 2 == 0;

Примечание, что лямбда-выражения с телами оператора могут только быть скомпилированы в делегатов, не Expression с:

Action a = () => { Console.WriteLine(obj.ToString()); };
13
ответ дан Marc Gravell 23 September 2019 в 15:10
поделиться
  1. Анонимные методы являются в основном функциями без имени со способностью создать закрытия.
  2. Лямбда-выражения являются конструкциями, которые конвертируемы и к анонимным методам и к деревьям выражений, и следуют более сложным правилам вывода типа, чем анонимные методы.

диапазон более или менее тонких различий объяснены Eric Lippert (разработчик языка C#) в его блоге:

23
ответ дан Pop Catalin 23 September 2019 в 15:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: