2010-04-16 7 views
14
  1. Quelqu'un peut-il expliquer ce que sont les LINQ, Lambda, méthodes anonymes, délégués signifiés?LINQ vs Lambda vs méthodes anonymes vs délégués

  2. Comment ces 3 sont différents les uns des autres?

  3. L'un était-il remplaçable par un autre?

Je n'ai pas eu de réponse concrète quand je ne googler

+4

il y a 4 choses dans cette liste ... –

+3

TheHurt

+0

@Sri Kumar: Je n'ai pas voté contre, mais je suppose que c'est un mélange entre le fait que cette information est facilement disponible et que votre anglais n'est pas parfait. –

Répondre

29

LINQ est un nom de technologie large couvrant un gros morceau de .NET 3.5 et les changements C# 3.0; "requête dans la langue" et des tonnes de plus. Un délégué est comparable à un pointeur de fonction; une « poignée de méthode » comme un objet, si vous voulez, à savoir

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

est une façon d'écrire un délégué que je peux alors appeler. Les délégués soutiennent également les événements et les autres approches de rappel.

Les méthodes anonymes sont les 2.0 sténographie pour la création d'instances de délégué, par exemple:

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

ils ont également introduit des fermetures complètes dans la langue via des « variables capturées » (non représentés ci-dessus). C# 3.0, qui introduit lambdas peut produire les mêmes que les méthodes anonymes:

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

mais qui peut aussi être compilé dans les arbres d'expression pour LINQ complète contre (par exemple) une base de données. Vous ne pouvez pas exécuter un délégué contre SQL Server, par exemple! mais:

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

peut être traduit en SQL, car il est compilé dans un arbre d'expression (System.Linq.Expression).

Alors:

  • une méthode anonyme peut être utilisé pour créer un délégué
  • un lambda peut être identique à une Anon méthode, mais pas nécessairement
1

Bien que la titre de ce lien est Anonymous methods il couvre les délégués, les méthodes anonymes et les expressions lambda.