A utilização de delegates é útil por conter a habilidade para personalizar comportamentos de objeto durante o uso e execução dos programas. Na maioria das vezes, você pode usar outras maneiras, mas a utilização de delegates pode ser apenas a maneira mais fácil em algumas situações para obter a “coisa feita”.
O exemplo abaixo é um tipo de delegate que contém a referência de método (s) em um objeto. É também referido como um ponteiro de tipo seguro ou “safe pointer type”.
class Program { public delegate int DelegateHandler(int a, int b); static void Main(string[] args) { Resultados resultados = new Resultados(); DelegateHandler dlgt = new DelegateHandler(resultados.Soma); Console.WriteLine("Resultado de soma é: " + dlgt(30, 10)); dlgt = new DelegateHandler(resultados.Subtrai); Console.WriteLine("Resultado de subtração é: " + dlgt(30, 10)); dlgt = new DelegateHandler(resultados.Multiplica); Console.WriteLine("Resultado de multiplicação é: " + dlgt(30, 10)); dlgt = new DelegateHandler(resultados.Divide); Console.WriteLine("Resultado de divisão é: " + dlgt(30, 10)); Console.ReadLine(); } } public class Resultados { public int Soma(int a, int b) { return a + b; } public int Subtrai(int a, int b) { return a - b; } public int Multiplica(int a, int b) { return a * b; } public int Divide(int a, int b) { return a / b; } }
As saídas serão os resultados de cada operação matemática, de uma forma bem simples. Você também pode customizar o delegate para exibir string, objetos e o que mais precisar!
Um grande abraço.