LINQ vs Lambda против анонимных методов против делегатов

  • Может ли кто-нибудь объяснить, что означает LINQ, Lambda, Anonymous Methods, делегаты?

  • Как эти 3 отличаются друг от друга?

  • Был ли один сменный для другого?

Я не получил никакого конкретного ответа, когда я сделал Googling

Ответы

Ответ 1

LINQ - это широкое название технологии, охватывающее большой фрагмент .NET 3.5 и изменения С# 3.0; "запрос на языке" и т.д.

Делегат сопоставим с указателем функции; "обработчик метода" как объекта, если хотите, т.е.

Func<int,int,int> add = (a,b) => a+b;

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

Анонимные методы - это 2,0 коротких рук для создания экземпляров делегатов, например:

someObj.SomeEvent += delegate {
    DoSomething();
};

они также вводили полные замыкания в язык через "захваченные переменные" (не показано выше). В С# 3.0 вводится lambdas, который может создавать такие же анонимные методы:

someObj.SomeEvent += (s,a) => DoSomething();

но который может также быть скомпилирован в деревья выражений для полного LINQ против (например) базы данных. Например, вы не можете запустить делегат против SQL Server! но:

IQueryable<MyData> source = ...
var filtered = source.Where(row => row.Name == "fred");

может быть переведен в SQL, поскольку он скомпилирован в дерево выражений (System.Linq.Expression).

Итак:

  • анонимный метод может быть использован для создания делегата
  • lambda может быть таким же, как метод anon, но необязательно

Ответ 2

Хотя название этой ссылки Анонимные методы, он охватывает делегаты, анонимные методы и лямбда-выражения.