using System; namespace Articulos.cap04 { internal sealed class EvolucionMetodosAnonimos { delegate int DelegadoCuadrado(int numero); static int Cuadrado(int numero) { return numero * numero; } static void Main() { // C# 1.0: Uso de delegados Console.WriteLine ("\n === C# 1.0: Uso de delegados === "); DelegadoCuadrado dc1 = new DelegadoCuadrado(Cuadrado); Console.WriteLine ("\t{0}", dc1(5).ToString()); // C# 2.0: Delegado con código de inicialización (métodos anónimos): // uso de la palabra clave `delegate` con los tipos // explítitos de los parámetros: Console.WriteLine (" === C# 2.0: Delegado con código de inicialización (métodos anónimos) === "); DelegadoCuadrado dc2 = delegate(int numero) { return numero * numero; }; Console.WriteLine ("\t{0}", dc2(7).ToString()); // C# 3.0: Delegado con expresión lambda: Console.WriteLine ("\n === C# 3.0: Delegado con expresión lambda ==="); DelegadoCuadrado cd3 = x => x * x; Console.WriteLine ("\t{0}", cd3(11).ToString()); // C# 3.0: Delegado genérico integrado y expresión lambda: // El delegado genérico Func: Console.WriteLine ("\n === C# 3.0: Delegado genérico integrado y expresión lambda ==="); System.Func cd4 = x => x * x; Console.WriteLine ("\t{0}\n", cd4(13).ToString()); } } }