static void Main(string[] args) { // instanciamos el delegado ya que como sabemos es un objeto var deEnteroAString = new DeEnteroAString(FuncionRetornaString); // instanciamos tambine la que lo retorna pero sumandole uno var deEnteroAStringMasUno = new DeEnteroAString(FuncionRetornaStringMas1); // mostramos el resultado y obviamente le pasamos los parametros como si fuera al metodo en si Console.WriteLine("Mostrando delegados para cambiar a string"); Console.WriteLine(deEnteroAString(10)); Console.WriteLine(deEnteroAStringMasUno(10)); // ahora probamos con delegados de mas de un parametro var masDeUnParam = new ReturnTheCombine(MasDeUnParam); Console.WriteLine("Mostrando delegados con mas de un parametro"); Console.WriteLine(masDeUnParam("Fulano", "De tal")); Console.WriteLine("Usamos el template para pasar un delegado y un valor"); // puedes pasarle el delgado que solo lo convierte a string Template(deEnteroAString, 40); // o puedes pasarle el delegado que suma uno Template(deEnteroAStringMasUno, 40);// ya que el delegado en si muestra el valor no necesitamos imprimirlo // no puedes enviarle el delegado que pide mas de un parametro ya que te dara error de signature // Template(masDeUnParam("Hola", "Que tal")); }
static void Main(string[] args) { DeEnteroAString deEnteroAString = new DeEnteroAString(FuncionRetornaStringMas1); Console.WriteLine(deEnteroAString(10)); Template(deEnteroAString, 10); //Otro delegado Func <int, string> delegadoFunc = FuncionRetornaString; Console.WriteLine("Delegado Func:" + delegadoFunc(10)); //La diferencia entre func y action es que FUNC exije que se devuelva algo, mientras que action NO. Action <string> delegadoAction = Ejemplo; delegadoAction("José"); Console.Read(); }
public static void Template(DeEnteroAString algoritmo, int valor) { Console.WriteLine("Hacer antes del algoritmo"); Console.WriteLine(algoritmo(valor)); Console.WriteLine("Hacer despues del algoritmo"); }