new event delete delegate custom attach c# events handlers

c# - delete - Custom EventHandler vs. EventHandler<EventArgs>



subscribe event handler c# (2)

Recientemente me he estado preguntando si hay alguna diferencia significativa entre este código:

public event EventHandler<MyEventArgs> SomeEvent;

Y éste:

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

Ambos hacen lo mismo y yo no he podido notar la diferencia. Aunque me he dado cuenta de 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?


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.


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 de .NET Framework tienen sus propios delegados de controladores de eventos personalizados es porque se escribieron antes de que se introdujeran los genéricos (que permitían la sintaxis abreviada) 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, la última forma era la única forma de hacer las cosas.