Compartir vía


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.

Vea también