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. |
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:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
C# - Usando expressões lambdas para os delegates ... - Macoratti