Delegates

Delegate (representante) é uma classe especial que funciona como ponteiro para funções. Ao criarmos uma instância de um delegate, passamos ao construtor o nome da função que desejamos referenciar.

//Cria um delegate

delegate void MeuDelegate(int a, int b);

O código acima cria um delegate que recebe dois inteiros como parâmetro, ou seja, esse delegate só poderá apontar para uma função que tenha a mesma assinatura, como a seguinte:

void MinhaFuncao(int a, int b);

Para o delegate referenciar a função acima, devemos escrever:

MeuDelegate instanciaDoDelegate = new MeuDelegate(MinhaFuncao);

Agora instanciaDoDelegate aponta para MinhaFuncao e se chamarmos instanciaDoDelegate(1,2); a MinhaFuncao(1,2) será executada.

Um delegate pode referenciar uma ou mais funções. Uma maneira de se fazer isso é: MeuDelegate instanciaDoDelegate = new MeuDelegate(funcao1); instanciaDoDelegate += funcao2; instanciaDoDelegate += funcao3;

Um delegate representa a assinatura de um método, podendo ser ele anônimo (utilizado em rotinas de ordenação, por exemplo), ou a assinatura de um método de evento.

Em C# os delegates são controles de primeira classe, totalmente suportados pela linguagem, um delegate é um tipo de referência usado para encapsular um método como uma assinatura e um tipo de retorno específico. Você pode encapsular qualquer método usando um delegate, mas o método deve coincidir com o delegate usado.

Criamos um delegate com a palavra-chave delegate seguida de um tipo de retorno e a assinatura dos métodos que podem ser delegados a ela, conforme abaixo:

public delegate int delegateInteiro( );

Esta declaração define um delegado chamado delegateInteiro, que encapsulará qualquer método que retorne um inteiro.

Uma vez definido o delegado, você pode encapsular um método-membro com ele, instanciando-o e passando um método que coincida com o tipo de assinatura.

Os eventos em C# são introduzidos com os delegates.

Last updated