C# -  Usando delegates para chamar operações matemáticas


No artigo de hoje vou mostrar mais uma forma de usar delegates que é fazer a chamada de operações matemáticas.


Um delegate é um elemento da linguagem C# que permite que você faça referência a um método.

Nota Um delegate é similiar ao conceito de ponteiros para funções usados nas linguagens C e C++

Então, um delegate em C#, é semelhante a um ponteiro de função (a vantagem é que é um ponteiro seguro). Usando um delegate você pode encapsular a referência a um método dentro de um objeto de delegação.

O objeto de delegação pode ser passado para o código o qual pode chamar o método referenciado sem ter que saber em tempo de compilação qual método será chamado.

Ora bolas... porque eu preciso de uma referência para um método ???

Quer uma resposta curta e grossa ???

Usando delegates você tem a flexibilidade para implementar qualquer funcionalidade em tempo de execução..

Vejamos o exemplo prático para clarear as idéias...

Recursos usados:

Criando o projeto no Visual Studio 2017 Community

Abra o VS 2017 Community e clique em New Project;

Selecione a linguagem Visual C# -> Windows Classic Desktop  e o template Console App(.NET Framework);

Informe o nome CShp_Delegates e clique no botão OK;

Namespaces usados no formulário :

using System;

Declare o delegate DoubleOperacao :

 delegate double DoubleOperacao(double x);

Nesta declaração definimos um delegate chamado DoubleOperacao() que recebe um parâmetro double.

Criando o método onde definimos as operações matemáticas

Vamos agora definir o método OperacaoMatematica()  que também recebe um double e define duas operações matematícas : Multiplicar e Potencia.

    public class OperacaoMatematica
    {
        public static double Multiplicar(double valor)
        {
           return valor * 2;
        }
        public static double Potencia(double valor)
        {
            return valor * valor;
        }
    }

Nosso objetivo será passar esse método para o delegate como um ponteiro.

Definindo o código no método Main

Agora defina o código abaixo no método Main:

    class Program
    {
        static void Main(string[] args)
        {
            DoubleOperacao[] operacoes =
            {
               OperacaoMatematica.Multiplicar,
               OperacaoMatematica.Potencia
            };
            for (int i = 0; i < operacoes.Length; i++)
            {
                Console.WriteLine("Operacao[{0}]:", i);
                ProcessarExibirResultado(operacoes[i], 7.0);
                ProcessarExibirResultado(operacoes[i], 12.55);
                ProcessarExibirResultado(operacoes[i], 1.432);
                Console.WriteLine();
            }
            Console.ReadLine();
        }
        static void ProcessarExibirResultado(DoubleOperacao acao, double valor)
        {
            double resultado = acao(valor);
            Console.WriteLine("Valor : {0}  Resultado : {1}", valor, resultado);
        }
  }

Neste código temos que:

- Criamos um array de operações do tipo do nosso delegate DoubleOperacao onde passamos as operações matemáticas definidas no método OperacaoMatematica.

            DoubleOperacao[] operacoes =
            {
               OperacaoMatematica.Multiplicar,
               OperacaoMatematica.Potencia
            };

 - A seguir o percorremos esse array e chamamos o método ProcessarExibirResultado passando o delegate contendo o ponteiro do método com as operações matemáticas e o valor.

 - O método ProcessarExibirResultado vai usar o ponteiro do método contendo as operações matemáticas e vai realizar cada uma delas usando o valor.

Executando o projeto iremos obter o seguinte resultado:

Vimos assim que mesmo em um código bem simples o uso do recurso delegates é muito poderoso.

Pegue o projeto completo aqui :   Cshp_Delegates.zip

Porque Deus enviou o seu Filho ao mundo, não para que condenasse o mundo, mas para que o mundo fosse salvo por ele.
Quem crê nele não é condenado; mas quem não crê já está condenado, porquanto não crê no nome do unigênito Filho de Deus.

João 3:17,18

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti