LINQ это широкое название технологии, охватывающее большой фрагмент .NET 3.5 и изменения C# 3.0; «запрос на языке» и т. д.
Делегат сопоставим с указателем функции; «метод ручка» как объект, если вам нравится, то есть
Func<int,int,int> add = (a,b) => a+b;
является способом написания делегата, который я могу затем позвонить. Делегаты также поддерживают подходы и другие обратные вызовы.
Анонимные методы являются 2,0 стенография для создания экземпляров делегата, например:
someObj.SomeEvent += delegate {
DoSomething();
};
они также введены полные замыкания на язык с помощью «захваченных переменных» (не показано выше). C# 3.0 вводит лямбды, которые могут производят так же, как анонимные методы:
someObj.SomeEvent += (s,a) => DoSomething();
, но которые могут также быть скомпилированы в деревья выражений для полной LINQ против (например) в базе данных. Например, вы не можете запустить делегат против SQL Server! но:
IQueryable<MyData> source = ...
var filtered = source.Where(row => row.Name == "fred");
могут быть переведены на SQL, поскольку он компилируется в дерево выражения (System.Linq.Expression
).
Итак:
- анонимный метод может быть использован для создания делегата
- лямбда может быть таким же, как Anon-метод, но не обязательно
есть 4 вещи в этом списке ... –
<враждебный ответ> – TheHurt
@Sri Kumar: Я не голосовал, но я бы догадался, что это смесь между тем, что это легкодоступная информация и что ваш английский не является совершенным. – 2010-04-16 16:53:21