2009-06-21 14 views
11

Hay una pregunta ya respondida que es In C#, isn't the observer pattern already implemented using Events?¿Patrón de observador implementado en C# con delegados?

Pregunta si el patrón de observador ya está implementado en C# utilizando eventos.

Mientras obtengo los eventos y el patrón del observador, ¿no es el patrón del observador realmente delegados y los eventos son una nueva implementación?

+0

¿Podría explicar su pregunta? Pareces estar al tanto de la otra pregunta y su respuesta, por lo que parece que estás preguntando algo además de eso, pero no está claro qué es. –

Respuesta

28

Usted es correcto. Un evento es simplemente un delegado con algunas funcionalidades ligeramente diferentes. Todo el patrón del observador se puede implementar con delegados sin tocar la palabra clave event.

Puede que le interese, entonces, lo que la palabra clave "evento" realmente trae a la mesa.

  • Los eventos pueden ser parte de una interfaz, mientras que campo delegado regular puede no
  • Los eventos pueden no ser invocadas por fuera de las clases, pero delega regular puede
  • Los eventos tienen descriptores de acceso adicionales (agregar y quitar) que se puede anular y proporcionar funcionalidad personalizada para

Edición: Here's a great writeup con la comparación de código IL entre eventos y delegados. (Pista: es más o menos lo mismo).

+0

@womp gracias por el artículo – TheVillageIdiot

+0

perspicaz @womp, con respecto a su primer punto, es 'Acción ' no es un delegado que puede ser parte de una interfaz? –

+0

@womp, con respecto a su primer punto de viñeta, es 'Acción ' no un delegado que puede ser parte de una interfaz? 'public interface ITest { void SupplyCallbackMethod (Acción devolución de llamada); } ' –