Eventos e Callbacks
Nota
Este conteúdo é reimpresso com permissão da Pearson Education, Inc., a partir 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 revisto 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 chame de volta ao código do usuário por meio de um delegado. Esses delegados geralmente são passados para a estrutura através de um parâmetro de um método.
Os eventos são um caso especial de retornos de chamada que suporta sintaxe conveniente e consistente para fornecer o delegado (um manipulador de eventos). Além disso, a conclusão de instrução e os designers do Visual Studio fornecem ajuda no uso de APIs baseadas em eventos. (Ver Design de Eventos.)
✔️ CONSIDERE o uso de retornos de chamada para permitir que os usuários forneçam código personalizado a ser executado pela estrutura.
✔️ CONSIDERE o uso de eventos para permitir que os usuários personalizem o comportamento de uma estrutura sem a necessidade de entender o design orientado a objetos.
✔️ DO prefere eventos em vez de retornos de chamada simples, porque eles são mais familiares a uma gama mais ampla de desenvolvedores e são integrados com a conclusão de instrução do Visual Studio.
❌ EVITE usar retornos de chamada em APIs sensíveis ao desempenho.
✔️ USE o novo Func<...>
, Action<...>
ou Expression<...>
tipos em vez de delegados personalizados, ao definir APIs com retornos de chamada.
Func<...>
e Action<...>
representar delegados genéricos. Expression<...>
Representa definições de função que podem ser compiladas e subsequentemente invocadas em tempo de execução, mas também podem ser serializadas e passadas para processos remotos.
✔️ O DO mede e compreende as implicações de desempenho do uso Expression<...>
do , em vez de usar Func<...>
e Action<...>
delegar.
Expression<...>
os tipos são, na maioria dos casos, logicamente equivalentes a Func<...>
e Action<...>
delegados. A principal diferença entre eles é que os delegados devem ser usados em cenários de processo local; As expressões destinam-se a casos em que é benéfico e possível avaliar a expressão num processo ou máquina remota.
✔️ ENTENDA que, ao chamar um delegado, você está executando código arbitrário e isso pode ter repercussões de segurança, correção e compatibilidade.
© Partes 2005, 2009 Microsoft Corporation. Todos os direitos reservados.
Reimpresso com permissão da Pearson Education, Inc., de Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition por Krzysztof Cwalina e Brad Abrams, publicado em 22 de outubro de 2008 por Addison-Wesley Professional como parte da Microsoft Windows Development Series.