Ejemplo n.º 1
0
        static void Main(string[] args)
        {
            //Agora é só especificar qual o tipo (int ou decimal), que delegate será capaz de utilizar o método (Somar ou SomarDecimal)
            CalculoMatematico <int>     calculoMatematico        = new CalculoMatematico <int>(Somar);
            CalculoMatematico <decimal> calculoMatematicoDecimal = new CalculoMatematico <decimal>(SomarDecimal);

            Console.WriteLine(calculoMatematico(1, 1));
            //No caso de decimal é obrigatório o uso do M para o compilador saber que e decimal e não um double
            Console.WriteLine(calculoMatematicoDecimal(1.1M, 1.1M));

            //Não é necessário passar o tipo utilizado no delegate para o método InfoDelegate, o compilador trabalha por inferencia, então
            //se calculoMatematico foi criado usando int é int
            InfoDelegate(calculoMatematico);
            //e se calculoMatematicoDecimal foi criado usando decimal é decimal
            InfoDelegate(calculoMatematicoDecimal);
            //se você escrever assim também funciona, mas é escrever código a mais
            //InfoDelegate<int>(calculoMatematico);


            //Criando um objeto
            Program p = new Program();
            //Acessando um método não estático
            CalculoMatematico <int> calculoNaoEstatico = new CalculoMatematico <int>(p.SomarNaoEstatico);

            Console.WriteLine(calculoNaoEstatico(1, 1));
            InfoDelegate(calculoNaoEstatico);
            Console.ReadKey();
        }
Ejemplo n.º 2
0
 //Utilizando generics aqui é póssivel usar tanto com calculoMatematico(que é int) como calculoMatematicoDecimal(que é decimal)
 private static void InfoDelegate <T>(CalculoMatematico <T> calculo)
 {
     //A propriedade Target mostra qual instancia está apontando
     //Quando vem de calculoMatematico ou calculoMatematicoDecimal fica vazia porque está apontando para métodos estaticos(métodos estáticos não são instanciados)
     //Quando vem de calculoNaoEstatico retorna um valor porque está apontando para um objeto (p)
     Console.WriteLine(calculo.Target);
     //A propriedade Method mostra para qual método o delegate está apontando
     Console.WriteLine(calculo.Method);
 }
Ejemplo n.º 3
0
        //camino 5 : entrada: 5, esperando : true
        public void esPrimo_valor5_esTrue()
        {
            //Arrange
            uint numero = 5;
            bool resultado;

            //Act
            resultado = CalculoMatematico.EsPrimo(numero);
            //Assert
            Assert.IsTrue(resultado, "El numero dado no es primo");
        }
Ejemplo n.º 4
0
        //camino 1 : entrada: 1, esperando : false
        public void esPrimo_valor1_esFalso()
        {
            //Arrange
            uint numero = 1;
            bool resultado;

            //Act
            resultado = CalculoMatematico.EsPrimo(numero);
            //Assert
            Assert.IsFalse(resultado, "El numero dado es primo");
        }
Ejemplo n.º 5
0
        //camino 3 : entrada: cualquier numero PAR, esperando : false
        public void esPrimo_valorCualquierPAR_esFalso()
        {
            //Arrange
            uint numero1 = 4;
            uint numero2 = 4294967294;

            //Act

            //Assert
            Assert.IsFalse(CalculoMatematico.EsPrimo(numero1), "El numero dado es primo");
            Assert.IsFalse(CalculoMatematico.EsPrimo(numero2), "El numero dado es primo");
        }
Ejemplo n.º 6
0
 private static void ExibirInformacoesDelegate <T>(CalculoMatematico <T> calculo)
 {
     Console.WriteLine(calculo.Target);
     Console.WriteLine(calculo.Method);
 }