예제 #1
0
    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
예제 #2
0
    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