Delegates C#
- Leonardo Asprino Rocha
- 16 de dez. de 2024
- 2 min de leitura
Confesso que esse foi um recurso que nunca parei para estudar, apenas usava arbitrariamente muito em aplicações windows forms por exemplo, mas agora que parei uns 10 minutos para ler sobre, lembrei de situação de código que o uso de delegates seria muito bem vindo. Ao meu entendimento, delegates permitem que você crie um contrato de alto nível de abstração(ou não) passando para esse contrato um ou mais métodos a serem executados. Assisti um vídeo explicado no youtube intitulado "Recursos do C# - Delegates" , do canal André Secco, em que ele cita um exemplo recomendado para uso de delegates: imagine uma função bem definida e que seja usada em muitos lugares, porém dependendo de certas classes que chamam esse função, dentro dela tem que ser realizado um comportamento específico dependendo do chamador(classe que invoca a função), logo um delegate pode ser definido e passado para essa função abrangente às diversas classes, e cada classe passa um método específico para ser executado no parâmetro dessa função.
Considere o exemplo da imagem a seguir:

Considere que o método DevolveMensamgeStatusSistema() é utilizado em muitos pontos da aplicação, e a sessão do método que possuí a instrução switch é justamente o comportamento diferenciado atríbuido a cada chamador do método. O exemplo ainda tem outro problema que o comportamento do chamador externo da função esta sendo feito nesse método principal, que seria a atribuição diferente a variável "mensagem". Vamos refatorar essa função agora com o uso de delegate e veremos uma grande melhora na usabilidade e legibilidade do código:

Agora o método DevolveMensagemStatusSistema() recebe como parâmetro um tipo delegate, que representa dinamicamente um método qualquer que seja passado por parâmetro, claro que esse método tem que seguir o contrato definido no delegate "RetornaMensagemDeConteudoClasseChamadora", ou seja, tem que ser um método sem parâmetros e que retorna um string. Desta maneira conseguimos isolar facilmente os comportamentos dos métodos "ClasseChamadora", melhorando o reúso de código.


Comentários