static void Main() { config_janela("prj_delegates"); // Criando uma instância de um delegate fn_calculos fn_ref; // Recebendo e chamando a função através do delegate fn_ref = dobro; fn_ref(8); // Recebendo e chamando a função através do delegate fn_ref = triplo; fn_ref(8); // Chamando diversas funções com um só delegate show("\n -------------------------------------"); show("Colocando várias funções na fila"); fn_ref = dobro; fn_ref += triplo; fn_ref += quintuplo; fn_ref(16); // Retirando funções da fila show("\n -------------------------------------"); show("Retirando funções da fila"); fn_ref -= triplo; fn_ref(7); // Outra forma de declarar um delegate show("\n\n -------------------------------------"); show("Utilizando outra forma de declaração de delegates"); fn_calculos fn_5x = new fn_calculos ( quintuplo); fn_5x(5); pause(); // Utilizando métodos anônimos show("\n\n -------------------------------------"); show("Utilizando métodos anônimos"); fn_ref += delegate(int nval) { Console.Write(" Método anônimo: 6x"); int res = nval * 6; Console.WriteLine(" O sextuplo de {0} é {1}", nval, res); }; fn_ref(2); pause(); } // main().fim
static void Main() { config_janela("prj_delegates02"); // Criando uma instância de um delegate fn_calculos fn_ref; // Chamando diversas funções com um só delegate show("\n -------------------------------------"); show("Colocando várias funções na fila"); fn_ref = dobro; fn_ref += triplo; fn_ref += quintuplo; fn_ref(16); pause(); // Utilizando métodos anônimos show("\n\n -------------------------------------"); show("Utilizando métodos anônimos"); fn_ref += delegate(int nval) { Console.Write(" Método anônimo: 6x"); int res = nval * 6; Console.WriteLine(" O sextuplo de {0} é {1}", nval, res); }; fn_ref(2); pause(); // Invocando as funções individualmente show("\n\n -------------------------------------"); show("Invocando as funções individualmente"); Delegate[] lista_metodos = fn_ref.GetInvocationList(); int ntam = lista_metodos.Length; for (int ncx = 0; ncx < ntam; ncx++) { fn_calculos metodo = (fn_calculos)lista_metodos[ncx]; metodo(100); metodo.Invoke(110); } // Economizando digitação com for each foreach (fn_calculos metodo in fn_ref.GetInvocationList()) { metodo(120); } pause(); } // main().fim