2011-05-18 6 views
9

Lectura mi C# libro, que habla sobre el uso de eventos/delegados (estoy asumiendo que estoy en lo cierto al pensar un evento es el equivalente de un delegado pública que no tiene ningún elemento de acceso variable) en un patrón deseado por EM:¿Debo usar EventHandler <T> y/o el patrón delegado EventArgs?

public delegate Something(object o, EventArgs e) 

y luego se va a explicar sobre EventArgs<T> que básicamente elimina la necesidad de que la declaración de delegado:

public EventHandler<SomeEventArgs> events 

¿Qué es la misma que (creo)

private delegate Something(object o, SomeEventArgs e); 

public event Something events; 

¿Es una buena idea usar EventHandler? Puedo ver por qué enviar el object podría ser útil, pero no todo el tiempo, y la mayoría de las veces, EventArgs puede resultar molesto de tratar.

+3

Personalmente, no soy seguidor del patrón de controlador de eventos en su forma actual. De hecho, tu última oración resume mis razones bastante bien. – ChaosPandion

Respuesta

9

Microsoft definitivamente ha promocionado algunos buenos patrones que han hecho que trabajar con C# sea una experiencia agradable. Una vez dicho esto, le recomiendo que escriba sus controladores de eventos para que sean convenientes para su código de cliente en lugar de escribir una gran cantidad de código solo para cumplir con un patrón.

delegate void ClientMessageHandler(IClient client, IMessage message); 
+1

¿No es esto exactamente lo mismo que mi tercera parte de código, excepto con IClient en lugar de objeto e IMessage en vez de EventArgs? Si es así, no veo lo que obtengo de esto, excepto tener que asegurarme de implementar IClient e IMessage ... conociéndome, me falta algo grande ;-) –

+2

@The Communist Duck - La diferencia es que usted es nunca estoy seguro de qué 'remitente' es sin verificar la documentación. El evento también debe inicializar un objeto 'EventArgs' solo para envolver la instancia' IMessage'. La firma de delegado habla por sí misma. – ChaosPandion

+0

Consulte también lo siguiente para otro enfoque: http://stackoverflow.com/questions/809609/c-sharp-simple-event-raising-using-sender-vs-custom-eventargs –

Cuestiones relacionadas