Partilhar via


Delegados (Guia de Programação em C#)

Um delegado é um tipo que representa referências a métodos com uma lista de parâmetros específica e um tipo de retorno. Ao instanciar um delegado, você pode associar a instância delegada a qualquer método que tenha uma assinatura e um tipo de retorno compatíveis. Você pode invocar (ou chamar) o método por meio da instância delegada.

Os delegados são usados para passar métodos como argumentos para outros métodos. Os manipuladores de eventos são essencialmente métodos que você invoca por meio de delegados. Quando você cria um método personalizado, uma classe como um controle do Windows pode chamar seu método quando ocorre um determinado evento.

O exemplo a seguir mostra uma declaração de delegado:

public delegate int PerformCalculation(int x, int y);

Você pode atribuir qualquer método de qualquer classe ou struct acessível que corresponda ao tipo de delegado ao delegado. O método pode ser estático ou um método de instância. A flexibilidade permite que você altere programaticamente chamadas de método ou conecte novo código a classes existentes.

Observação

No contexto de sobrecarga de método, a assinatura de um método não inclui o valor de retorno. No entanto, no contexto de delegados, a assinatura inclui o valor de retorno. Em outras palavras, um método deve ter um tipo de retorno compatível como o tipo de retorno declarado pelo delegado.

A capacidade de se referir a um método como um parâmetro torna os delegados ideais para definir métodos de callback. Você pode escrever um método que compara dois objetos em seu aplicativo. O método pode então ser utilizado numa função delegada para um algoritmo de ordenação. Como o código de comparação é separado da biblioteca, o método de classificação pode ser mais geral.

Os ponteiros de função suportam cenários semelhantes, onde necessita-se de mais controlo sobre a convenção de chamada. O código associado a um delegado é invocado usando um método virtual adicionado a um tipo de delegado. Ao trabalhar com ponteiros de função, você pode especificar convenções diferentes.

Explore as características do delegado

Os delegados têm as seguintes características:

  • Os delegados permitem que os métodos sejam passados como parâmetros.
  • Os delegados podem ser usados para definir métodos de retorno de chamada.
  • Os delegados podem ser encadeados, como chamar vários métodos num único evento.
  • Os métodos não precisam corresponder exatamente ao tipo de delegado. Para obter mais informações, consulte Usando Variância em Delegados.
  • As expressões lambda são uma maneira mais concisa de escrever blocos de código embutidos. As expressões lambda (em determinados contextos) são compiladas para delegar tipos. Para obter mais informações sobre expressões lambda, consulte expressões lambda.

Para obter mais informações sobre delegados, consulte os seguintes artigos:

Acesse a especificação da linguagem C#

A especificação da linguagem é a fonte definitiva para a sintaxe e o uso do C#. Para obter mais informações, consulte Delegados na Especificação da Linguagem C# .