Delegados (Guia de Programação em C#)
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 sua instância a qualquer método com assinatura e tipo de retorno compatíveis. Você pode invocar (ou chamar) o método através da instância de delegado.
Delegados são usados para passar métodos como argumentos a outros métodos. Os manipuladores de eventos nada mais são do que métodos chamados por meio de delegados. Ao criar um método personalizado, uma classe como um controle do Windows poderá chamá-lo quando um determinado evento ocorrer. O seguinte exemplo mostra uma declaração de delegado:
public delegate int PerformCalculation(int x, int y);
Qualquer método de qualquer classe ou struct acessível que corresponda ao tipo delegado pode ser atribuído ao delegado. O método pode ser estático ou de instância. Isso possibilita alterar via programação chamadas de método e também conectar novo código a classes existentes.
Dica
No contexto da 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 o mesmo tipo de retorno que o delegado.
Essa capacidade de se referir a um método como um parâmetro torna delegados ideais para definir métodos de retorno de chamada. Por exemplo, uma referência a um método que compara dois objetos poderia ser passada como um argumento para um algoritmo de classificação. Como o código de comparação está em um procedimento separado, o algoritmo de classificação pode ser escrito de forma mais geral.
Visão geral de delegados
Os delegados possuem as seguintes propriedades:
Os delegados são como ponteiros de funções em C++, mas apresentam tipos seguros.
Os delegados permitem que 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 juntos; por exemplo, vários métodos podem ser chamados um único evento.
Os métodos não precisam corresponder ao tipo delegado exatamente. Para obter mais informações, consulte Usando variação em delegações (C# e Visual Basic).
O C# versão 2.0 introduziu o conceito de Métodos Anônimos que permitem que blocos de código sejam passados em vez de um método definido separadamente. O C# 3.0 introduziu expressões lambda como uma maneira mais concisa de escrever blocos de código embutidos. Os métodos anônimos e as expressões lambda (em determinados contextos) são compilados para tipos delegados. Juntos, esses recursos são agora conhecidos como funções anônimas. Para obter mais informações sobre expressões lambda, consulte Funções anônimas (Guia de Programação em C#).
Nesta seção
Quando usar delega em vez de Interfaces (guia de programação C#)
Delegados com métodos nomeados versus anônimos (Guia de Programação em C#)
Como combinar delegados (delegados multicast) (Guia de Programação em C#)
Como declarar e usar um delegado e criar uma instância dele (Guia de Programação em C#)
Especificação da Linguagem C#
Para obter mais informações, consulte a Especificação da linguagem C#. A especificação da linguagem é a fonte definitiva para a sintaxe e o uso de C#.
Capítulos do Livro em Destaque
Delegates, Events, and Lambda Expressions em C# 3.0 Cookbook, Third Edition: More than 250 solutions for C# 3.0 programmers.
Delegates and Events em Learning C# 3.0: Master the fundamentals of C# 3.0.
Consulte também
Referência
Eventos (Guia de Programação em C#)