2011-12-29 10 views
60

Recientemente me he estado preguntando si hay alguna diferencia significativa entre este código:personalizada manejador de sucesos vs manejador de sucesos <EventArgs>

public event EventHandler<MyEventArgs> SomeEvent; 

Y éste:

public delegate void MyEventHandler(object sender, MyEventArgs e); 
public event MyEventHandler SomeEvent; 

ambos hacen lo mismo y No he podido notar la diferencia. Aunque he notado que la mayoría de las clases de .NET Framework usan un delegado controlador de eventos personalizado para sus eventos. ¿Hay una razón específica para esto?

Respuesta

67

Tienes razón; Ellos hacen la misma cosa. Por lo tanto, probablemente deberías preferir lo primero a lo último porque es más claro y requiere menos tipeo.

La razón por la que muchas de las clases .NET Framework tienen sus propios delegados controladores de eventos personalizados es porque se escribieron antes de los genéricos (que permitían la sintaxis abreviada) se introdujeron en la versión 2.0. Por ejemplo, casi todas las bibliotecas de WinForms se escribieron antes de los genéricos, y en aquellos días, el último formulario era el único forma de hacer las cosas.

+0

Gracias por su respuesta. Me dejó las cosas más claras. – haiyyu

-1

La segunda forma brinda más flexibilidad y seguridad tipo. Hay menos métodos con la firma correspondiente => menos lugar para un error. El delegado personalizado le permite especificar exactamente los parámetros que necesita (o no especificar ninguno) - no hay remitente + argumenta culto a la carga.

+1

Curioso por qué esto se ha votado negativamente, parece un beneficio perfectamente razonable de los controladores de eventos personalizados. – Cerzi

Cuestiones relacionadas