Esempio n. 1
0
        static void Main(string[] args)
        {
            Producto nuevo = new Producto()
            {
                Id = 1,
                Nombre = "Platano",
                Precio = 2
            };

            DelegadosPruebas.CreaProducto(nuevo);
            //Versión C#1.0

            DelProducto midelegado = new DelProducto(miprocesado);
            DelegadosPruebas.Procesador(midelegado);
            DelProducto midelegado2 = new DelProducto(miprocesado2);
            DelegadosPruebas.Procesador(midelegado2);

            //A partir de la versión 2.0 de C#
            DelegadosPruebas.Procesador(miprocesado2);

            //También permitimos métodos anónimos
            DelProducto delegado = delegate(Producto pr)
            {
                Console.WriteLine("Este es un delegado con método anónimo. Su precio es {0}", pr.Precio);
                Console.ReadLine();
            };
            DelegadosPruebas.Procesador(delegado);

            //Versión C# 3.0
            DelProducto delegado2 = pr =>
            {
                Console.WriteLine("Este es un delegado con función lambda. Su precio es {0}", pr.Precio);
                Console.ReadLine();
            };
            DelegadosPruebas.Procesador(delegado2);

            //Aparece la clase FUNC que encapsula un delegado
            //Recibe un parámetro tipo Producto y devuelve un booleano (el último)

            Func<Producto, bool> delegado3 = pr =>
            {
                Console.WriteLine("Este es un delegado con función lambda. Su precio es {0}", pr.Precio);
                Console.ReadLine();
                return true;
            };
            DelegadosPruebas.Procesador2(delegado3);

            //Action para delegados que no devuelven nada
            Action<Producto> delegado4 = pr =>
            {
                Console.WriteLine("Este es un delegado con función lambda. Su precio es {0}", pr.Precio);
                Console.ReadLine();
            };
            DelegadosPruebas.Procesador3(delegado4);

            //Arbol de expresiones Syste.Linq.Expressions solo admiten como método anonimos expresiones
            System.Linq.Expressions.Expression<Func<Producto, bool>> expresion = pr => pr.Precio > 5;
            DelegadosPruebas.Procesador4(expresion);
        }
 public static void Procesador(DelProducto dp)
 {
     dp(P);
 }