Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Os delegados fornecem um mecanismo de vinculação tardia no .NET. Ligação Tardia significa que se cria um algoritmo no qual o chamador também fornece pelo menos um método que implementa parte do algoritmo.
Por exemplo, considere classificar uma lista de estrelas em um aplicativo de astronomia. Você pode optar por classificar essas estrelas por sua distância da Terra, ou a magnitude da estrela, ou seu brilho percebido.
Em todos esses casos, o método Sort() faz essencialmente a mesma coisa: organiza os itens na lista com base em alguma comparação. O código que compara duas estrelas é diferente para cada uma das ordens de classificação.
Estes tipos de soluções têm sido utilizados em software há meio século. O conceito de delegado de linguagem C# fornece suporte a linguagem de primeira classe e segurança de tipo em torno do conceito.
Como você verá mais adiante nesta série, o código C# que você escreve para algoritmos como este é seguro para digitação. O compilador garante que os tipos correspondam para argumentos e tipos de retorno.
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. Usando ponteiros de função, você pode especificar convenções diferentes.
Metas de design de linguagem para delegados
Os projetistas da linguagem enumeraram vários objetivos para a funcionalidade que acabou por se transformar em delegados.
A equipe queria uma construção de linguagem comum que pudesse ser usada para qualquer algoritmo de ligação tardia. Os delegados permitem que os desenvolvedores aprendam um conceito e usem esse mesmo conceito em muitos problemas de software diferentes.
Em segundo lugar, a equipe queria oferecer suporte a chamadas de método único e multicast. (Delegados de multicast são delegados que encadeiam várias chamadas de método. Você verá exemplos mais adiante nesta série.)
A equipe queria que os delegados suportassem o mesmo tipo de segurança que os desenvolvedores esperam de todas as construções em C#.
Finalmente, a equipe reconheceu que um padrão de evento é um padrão específico onde delegados, ou qualquer algoritmo de vinculação tardia, é útil. A equipe queria garantir que o código para delegados pudesse fornecer a base para o padrão de evento .NET.
O resultado de todo esse trabalho foi o suporte a delegados e eventos em C# e .NET.
Os artigos restantes desta série abordarão recursos de idioma, suporte a bibliotecas e expressões idiomáticas comuns usadas quando você trabalha com delegados e eventos. Você aprenderá sobre:
- A
delegate
palavra-chave e o código que gera. - Os recursos na
System.Delegate
classe e como esses recursos são usados. - Como criar delegados seguros ao tipo.
- Como criar métodos que podem ser invocados através de delegados.
- Como trabalhar com delegados e eventos usando expressões lambda.
- Como os delegados se tornam um dos blocos de construção para o LINQ.
- Como os delegados são a base para o padrão de evento .NET e como eles são diferentes.
Vamos começar.