Eventos e retornos de chamada
Observação
Este conteúdo é reimpresso com permissão da Pearson Education, Inc. de Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition. Essa edição foi publicada em 2008 e, desde então, o livro foi totalmente revisado na terceira edição. Algumas das informações nesta página podem estar desatualizadas.
Retornos de chamada são pontos de extensibilidade que permitem que uma estrutura retorne ao código do usuário por meio de um delegado. Esses delegados geralmente são passados para a estrutura por meio de um parâmetro de um método.
Os eventos são um caso especial de retornos de chamada que dão suporte a sintaxe conveniente e consistente para fornecer o delegado (um manipulador de eventos). Além disso, os designers e o preenchimento de declaração do Visual Studio ajudam no uso de APIs baseadas em eventos. (Confira Design de Evento.)
✔️ CONSIDERE usar retornos de chamada para permitir que os usuários forneçam código personalizado a ser executado pela estrutura.
✔️ CONSIDERE usar eventos para permitir que os usuários personalizem o comportamento de uma estrutura sem necessidade de entender o design orientado ao objeto.
✔️ PREFIRA eventos a retornos de chamada simples, pois eles são mais familiares para uma gama maior de desenvolvedores e são integrados ao preenchimento de declaração do Visual Studio.
❌ EVITE usar retornos de chamada em APIs sensíveis ao desempenho.
✔️ USE os novos tipos Func<...>
, Action<...>
ou Expression<...>
em vez de delegados personalizados ao definir APIs com retornos de chamada.
Func<...>
e Action<...>
representam delegados genéricos. Expression<...>
representa definições de função que podem ser compiladas e depois invocadas em tempo de execução, mas também podem ser serializadas e passadas para processos remotos.
✔️ MEÇA e entender as implicações de desempenho de usar Expression<...>
, em vez de usar delegados Func<...>
e Action<...>
.
Os tipos Expression<...>
são, na maioria dos casos, logicamente equivalentes a delegados Func<...>
e Action<...>
. A principal diferença entre eles é que os delegados devem ser usados em cenários de processo local; expressões são destinadas a casos em que é benéfico e possível avaliar a expressão em um processo remoto ou computador.
✔️ Entenda que, ao chamar um delegado, você está executando código arbitrário, o que pode ter repercussões de segurança, correção e compatibilidade.
Portions © 2005, 2009 Microsoft Corporation. Todos os direitos reservados.
Reimpresso com permissão da Pearson Education, Inc. das Diretrizes de Design do Framework: convenções, linguagens e padrões para bibliotecas do .NET reutilizável, 2ª edição por Krzysztof Cwalina e Brad Abrams, publicado em 22 de outubro de 2008 por Addison-Wesley Professional como parte da série de desenvolvimento do Microsoft Windows.