Eventos y devoluciones de llamada
Nota:
Este contenido se ha copiado con permiso de Pearson Education, Inc. de Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2ª edición. Esa edición se publicó en 2008 y el libro se ha revisado completamente en la tercera edición. Parte de la información de esta página puede estar obsoleta.
Las devoluciones de llamada son puntos de extensibilidad que permiten a un marco volver a llamar al código de usuario a través de un delegado. Estos delegados se pasan normalmente al marco a través de un parámetro de un método.
Los eventos son un caso especial de devoluciones de llamada que admiten una sintaxis adecuada y coherente para proporcionar el delegado (un controlador de eventos). Además, los diseñadores y la finalización de instrucciones de Visual Studio proporcionan ayuda para utilizar las API basadas en eventos. (Consulte Diseño de eventos).
✔️ PLANTÉESE la posibilidad de usar devoluciones de llamada para permitir que los usuarios proporcionen código personalizado para que lo ejecute el marco.
✔️ PLANTÉESE la posibilidad de usar eventos para que los usuarios puedan personalizar el comportamiento de un marco sin necesidad de entender el diseño orientado a objetos.
✔️ OPTE por eventos en lugar de devoluciones de llamada sin formato, porque son más familiares para una gama más amplia de desarrolladores y están integrados con la finalización de declaraciones de Visual Studio.
❌ EVITE usar devoluciones de llamada en las API sensibles al rendimiento.
✔️ DEBE usar los nuevos tipos de Func<...>
, Action<...>
o Expression<...>
en lugar de los delegados personalizados al definir las API con devoluciones de llamada.
Func<...>
y Action<...>
representan delegados genéricos. Expression<...>
representa definiciones de función que se pueden compilar e invocar posteriormente en tiempo de ejecución, pero también se pueden serializar y pasar a procesos remotos.
✔️ DEBE medir y comprender las implicaciones de rendimiento que supone usar Expression<...>
, en lugar de usar los delegados Func<...>
y Action<...>
.
En la mayoría de los casos, los tipos Expression<...>
son lógicamente equivalentes a los delegados Func<...>
y Action<...>
. La diferencia principal entre ellos es que los delegados están diseñados para usarse en escenarios de procesos locales; las expresiones están indicadas para los casos en los que resulta ventajoso y posible evaluar la expresión en un proceso o equipo remoto.
✔️ DEBE comprender que, al llamar a un delegado, está ejecutando código arbitrario y que podría tener repercusiones en la seguridad, la exactitud y la compatibilidad.
Portions © 2005, 2009 Microsoft Corporation. Todos los derechos reservados.
Material reimpreso con el consentimiento de Pearson Education, Inc. y extraído de Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition (Instrucciones de diseño de .NET Framework: convenciones, expresiones y patrones para bibliotecas .NET reutilizables, 2.ª edición), de Krzysztof Cwalina y Brad Abrams, publicado el 22 de octubre de 2008 por Addison-Wesley Professional como parte de la serie Microsoft Windows Development.