Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Um delegado é um tipo que representa referências aos métodos com lista de parâmetros e tipo de retorno específicos. Ao instanciar um delegado, você pode associar a instância de delegado a qualquer método com assinatura e tipo de retorno compatíveis. Você pode invocar (ou chamar) o método por meio da instância delegada.
Delegados são usados para passar métodos como argumentos a 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 um determinado evento ocorre.
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 as chamadas de método ou conecte um novo código às classes existentes.
Observação
No contexto de sobrecarga de método, a assinatura de um método não inclui o valor retornado. No entanto, no contexto de delegados, a assinatura inclui o valor retornado. 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 referir-se 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 usado em um delegado para um algoritmo de classificaçã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 dão suporte a cenários semelhantes, em que você precisa de mais controle 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.
Explorar características de delegados
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 em um único evento.
- Os métodos não precisam corresponder exatamente ao tipo delegado. Para obter mais informações, confira Usando a variação delegados.
- Expressões lambda são uma maneira mais concisa de escrever blocos de código diretamente. 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.
Revisar artigos relacionados
Para obter mais informações sobre delegados, consulte os seguintes artigos:
- Usar delegados
- Delegados com métodos nomeados vs. anônimos
- Usar a variação em delegados
- Como combinar delegados (delegados multicast)
- Como declarar, instanciar e usar um delegado
Acessar a especificação da linguagem C#
A especificação de idioma é a fonte definitiva para a sintaxe e o uso de C#. Para obter mais informações, consulte Delegados na Especificação da Linguagem C#.