LINQ против лямбды против анонимных методов против делегатов - PullRequest
15 голосов
/ 16 апреля 2010
  1. Кто-нибудь может объяснить, что означают LINQ, Lambda, Anonymous Methods, Delegates?

  2. Чем эти 3 отличаются друг от друга?

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

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

Ответы [ 3 ]

31 голосов
/ 16 апреля 2010

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).

Итак:

  • анонимный метод может использоваться для создания делегата
  • лямбда может быть тем же, что и анон-метод, но не обязательно
1 голос
/ 11 мая 2010

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

0 голосов
/ 16 апреля 2010

LINQ Лямбда-выражения анонимные методы делегаты

это полные объяснения из MSDN, большинство с примерами ...

...