2010-04-16 13 views
14
  1. Kann jemand erklären, was sind die LINQ, Lambda, anonyme Methoden, Delegaten gemeint?LINQ vs Lambda vs anonyme Methoden vs Delegierte

  2. Wie diese 3 sind füreinander unterschiedlich?

  3. War einer austauschbar für einen anderen?

Ich habe keine konkrete Antwort bekommen, wenn ich

+4

Es gibt 4 Dinge in dieser Liste ... –

+3

TheHurt

+0

@Sri Kumar: Ich habe nicht abgestimmt, aber ich würde vermuten, es ist eine Mischung aus der Tatsache, dass dies leicht verfügbare Informationen und das ist Ihr Englisch ist nicht perfekt. –

Antwort

29

LINQ ist ein umfassender Technologie-Name, der einen Großteil der .NET 3.5- und C# 3.0-Änderungen abdeckt; "Abfrage in der Sprache" und Tonnen mehr.

Ein Delegat ist vergleichbar mit einem Funktionszeiger; ein „Verfahren handle“ als Objekt, wenn man so will, das heißt

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

ist ein Art und Weise, einen Delegierten zu schreiben, die ich dann anrufen können. Die Delegierten unterstützen auch Eventing- und andere Callback-Ansätze.

Anonyme Methoden sind die 2.0 Kurz Hand für Delegierten Fälle zu schaffen, zum Beispiel:

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

sie auch die vollen Verschlüsse in die Sprache über „eingefangen Variablen“ (oben nicht gezeigt) eingeführt. C# 3.0 führt Lambdas, die die gleiche wie anonyme Methoden produzieren können:

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

aber die kann auch in Ausdrucksbaumstrukturen für die vollständige LINQ gegen (zum Beispiel) kompiliert werden einer Datenbank. Sie können beispielsweise keinen Delegaten für SQL Server ausführen! aber:

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

kann in SQL übersetzt werden, wie es in einem Ausdrucksbaum zusammengestellt (System.Linq.Expression).

So:

  • eine anonyme Methode verwendet werden kann, einen Delegaten
  • eine Lambda zu schaffen das gleiche wie ein Anon-Methode sein könnte, aber nicht unbedingt
1

Obwohl die Der Titel dieses Links lautet Anonymous methods und umfasst Delegaten, anonyme Methoden und Lambda-Ausdrücke.