LINQ es un nombre de tecnología amplia que cubre una gran parte de .NET 3.5 y los cambios de C# 3.0; "consulta en el idioma" y mucho más.
Un delegado es comparable a un puntero a función; un "mango método" como un objeto, si se quiere, es decir,
Func<int,int,int> add = (a,b) => a+b;
es una forma de escribir un delegado que entonces puedo llamar. Los delegados también apuntalan los eventos y otros enfoques de devolución de llamada.
métodos anónimos son el 2,0 corta a mano para crear instancias de delegado, por ejemplo:
someObj.SomeEvent += delegate {
DoSomething();
};
también introdujeron cierres completos a la lengua a través de "variables capturados" (no se muestra más arriba). C# 3.0 introduce lambdas, que puede producir el mismo que los métodos anónimos:
someObj.SomeEvent += (s,a) => DoSomething();
pero que puede también ser compilado en árboles de expresión para la plena LINQ contra (por ejemplo) una base de datos. ¡No puede ejecutar un delegado contra SQL Server, por ejemplo! pero:
IQueryable<MyData> source = ...
var filtered = source.Where(row => row.Name == "fred");
puede ser traducido en SQL, ya que se compila en un árbol de expresión (System.Linq.Expression
).
Así:
- un método anónimo se puede utilizar para crear un delegado
- una lambda podría ser el mismo que un anon-método, pero no necesariamente
hay 4 cosas en esa lista ... –
@Sri Kumar: No voté hacia abajo, pero yo supongo que es una mezcla entre el hecho de que esta información es fácilmente disponible y que su Inglés no es perfecto. –