Ответ 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, но необязательно