2008-10-29 15 views
5

¿Cuál es el punto en el patrón estándar para delegados de eventos en .net? Es decir. el delegado predefinido EventHandler? ¿Por qué no simplemente elegir la firma más adecuada para el requisito?Patrón de firma de evento en .net

Editar: ¿Y además, es necesario seguir servilmente el ejemplo de Microsoft en todos los casos?

Respuesta

3

Es principalmente para la consistencia y control de versiones, con el parámetro de sender como siempre System.Object y el parámetro args como siempre un System.EventArgs, o una clase dervied del mismo, se puede cambiar el argumento remitente se le ha pasado, así como el cambio EventArgs escribe luego sin romper ningún código existente.

Toda la terminología .NET eventing fue diseñada para soportar el desarrollo basado en componentes, donde el código de llamada no está bajo el control del desarrollador del componente con los eventos.

2

Desacopla a la persona que llama del destinatario.

3

Esta es una buena pregunta. Hereje, pero bueno. Hace poco leí una publicación en el blog (no encuentro el enlace, ¿alguien tiene ese vínculo?) Que desacreditó el mito de que siempre debes anular System.EventArgs para proporcionar un buen manejo de eventos.

Estoy a favor de la convención y siguiendo las reglas, pero esta es una que creo puede argumentarse que es flexible, si no evitable. Necesitar anular constantemente System.EventArgs para cada evento se suma al acoplamiento de la rutina; ahora hay otra cosa de la que no perderse el control.

Tener una "e" que proporciona miembros no es más útil o intuitivo que un conjunto de argumentos bien nombrado. No creo que se pueda ganar el argumento para enviar el patrón System.EventArg recomendado, pero me gustaría presentarlo para hacer ese argumento.

rp

4

En C# 1.0 de la convención no hizo mucho sentido. En C# 2.0, donde hay una cierta cantidad de variación de delegado, tiene más sentido.

Si tiene un método de manejo de eventos que realmente no le importa los parámetros, p.

public void SaveDocument(object sender, EventArgs args) 
{ 
    // Save the document here 
} 

ahora se puede utilizar este método para suscribirse a cualquier acontecimiento que sigue la convención, incluso si el remitente o argumentos reales se escriben de manera más estricta. Esto significa que puede usar el mismo controlador para un evento de teclado, un clic de botón, etc.

Cuestiones relacionadas