2010-04-16 4 views
14
  1. Может ли кто-нибудь объяснить, что такое LINQ, Lambda, Anonymous Methods, делегаты?LINQ vs Lambda vs Анонимные методы против делегатов

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

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

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

+4

есть 4 вещи в этом списке ... –

+3

<враждебный ответ> – TheHurt

+0

@Sri Kumar: Я не голосовал, но я бы догадался, что это смесь между тем, что это легкодоступная информация и что ваш английский не является совершенным. – 2010-04-16 16:53:21

ответ

29

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-метод, но не обязательно
1

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

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