Neste artigo voltamos ao assunto delegates para mostrar a aplicação do conceito de delegates em 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 ???
R: Usando delegates você tem a flexibilidade para implementar qualquer funcionalidade em tempo de execução..
Vamos a seguir mostrar exemplos práticos da utilização de delegates em operações matemáticas.
O projeto usado como exemplo neste artigo foi criado no VS 2019 Community como um projeto .NET Core do tipo Console chamado : CShp_Delegates
1- Chamando operações matemáticas usando Delegates
Neste exemplo vamos usar os Delegates para encapsular funções em objetos de função que podem ser chamados, da mesma forma que é feita nas linguagens C e C++.
Como os ponteiros de função, os delegates permitem separar uma referência de função de sua implementação, permitindo que a implementação exista em um módulo separado.
Este programa possui uma classe chamada OperacoesMatematicas
namespace CShp_Delegates
{
public class OperacoesMatematicas
{
public static double Multiplicar(double valor)
{
return valor * 2;
}
public static double ElevarAoQuadrado(double valor)
{
return valor * valor;
}
}
}
|
A seguir na classe Program definimos o
using static System.Console;
namespace CShp_Delegates
{
class Program
{
delegate double MinhasOperacoes(double x);
static void Main(string[] args)
{
MinhasOperacoes[] operacoes =
{
OperacoesMatematicas.Multiplicar,
OperacoesMatematicas.ElevarAoQuadrado
};
for (int i = 0; i < operacoes.Length; i++)
{
WriteLine($"Operacao[{i}]:");
ExibirResultado(operacoes[i], 5.36);
ExibirResultado(operacoes[i], 13.75);
ExibirResultado(operacoes[i], 1.732);
WriteLine();
}
ReadLine();
}
static void ExibirResultado(MinhasOperacoes acao, double valor)
{
double resultado = acao(valor);
WriteLine($"Valor : {valor} Resultado : {resultado}");
}
}
}
|
Neste código estamos chamando as operações matemáticas usando delegates.
Um delegate é uma variável de tipo de referência(MinhasOperacoes)
que contém a referência a um método sendo que a referência pode
ser alterada em tempo de execução, e, fazemos isso usando um laço
para executar funções diferentes, chamando a função usando a
variável de objeto delegate.
Aqui, os Delegates são usados para encapsular funções em objetos
de função que podem ser chamados e usados como ponteiros de
função. Como os ponteiros de função, os delegates permitem
separar uma referência de função de sua implementação,
permitindo que a implementação exista em um módulo separado.
O resultado da execução do projeto pode ser vista abaixo:
2- Convertendo de pés para polegadas e de polegadas para centímetros
Usando a mesma abordagem podemos criar um projeto para converter os valores de pés para polegadas e de polegadas para centimetros.
Para isso vamos criar uma nova classe chamada ConversorMedidas onde vamos realizar as conversões :
namespace CShp_Delegates
{
public class ConversorMedidas
{
public static double PolegadasParaCentimetros(double polegadas)
{
return polegadas / 0.39370;
}
public static double PesParaPolegadas(double pes)
{
return pes * 12;
}
}
}
|
A seguir no arquivo Program definimos as instâncias dos delegates apontando para os métodos definidos na classe acima e depois realizamos as conversões :
A seguir vemos o resultado obtido:
Percebeu a flexibilidade dos delegates e as possibilidades de usar esse recurso no seu código ?
Pegue o código completo aqui: CShp_Delegates.zip
"Então, aproximando-se dele
um escriba, disse-lhe: Mestre, seguir-te-ei para onde
quer que fores.
Mas Jesus lhe respondeu: As raposas têm seus covis, e as
aves do céu, ninhos; mas o Filho do Homem não tem onde
reclinar a cabeça."
Mateus 8:19,20
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 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Encapsulation and Inheritance in Object-Oriented Programming Languages
O padrão Strategy : utilização - Macoratti
NET - Usando padrões de projeto e princípios OOP na ... - Macoratti
C# - Boas Práticas : Aprendendo com maus exemplos ... - Macoratti
NET - O padrão de projeto Mediator - Macoratti
NET - Design Patterns - Uma abordagem Prática - Macoratti