Entiendo los beneficios de utilizar la firma de delegado del controlador de eventos MS estándar, ya que le permite expandir fácilmente la información transmitida a través del evento sin romper las relaciones antiguas que se basan en la antigua firma de delegado.¿Qué tan malo es crear un delegado controlador de eventos sin la firma estándar (Obj sender, EventArgs args)?
Lo que me pregunto es en la práctica con qué frecuencia las personas siguen esta regla? Decir que tengo un evento simple como esto
public event NameChangedHandler NameChanged;
public delegate void NameChangedHandler(Object sender, string oldName, string newName);
Es un evento simple, y estoy casi seguro de que los únicos argumentos que jamás voy a necesitar saber del evento NameChanged es el objeto cuyo nombre cambiado, el nombre antiguo y el nuevo nombre. Entonces, ¿vale la pena crear una clase separada NameChangedEventArgs, o para eventos simples como este, es aceptable simplemente devolver los argumentos directamente a través de los argumentos delegados?
Puede adaptar esto, por supuesto, para tener una sola propiedad, o tres, o tantas como desee. Tengo fragmentos para 1, 2 o 3 propiedades, así como para el caso simple de crear un evento sin datos de eventos específicos. –
Soy consciente de que esta es una respuesta anterior, pero me gustaría agregar un enlace a este hilo: [Firma de evento en .NET - ¿Usando un 'Remitente' de tipo fuerte?] (Http://stackoverflow.com/q/ 1046016/69809). En mi humilde opinión, no hay ninguna razón para seguir dogmáticamente una convención, si resulta en prácticas de codificación malolientes (por ejemplo, emitir el parámetro 'sender'). La clase 'EventArgs' tampoco proporciona ningún beneficio, aunque * podría * argumentar que es mejor ajustar los datos pasados para mantener la compatibilidad de la fuente. – Groo
@Groo, es una idea interesante. No había visto ese hilo antes. Tenga en cuenta que la persona que hizo la pregunta * aquí * estaba hablando sobre el uso de un delegado controlador de eventos con más de dos propiedades, y no está utilizando el patrón 'sender, EventArgs' estándar. Lo que estaba en cuestión aquí no era tanto el 'remitente' de transmisión, sino también si se usaba o no un parámetro' EventArgs' o 'EventArgs' en lugar de múltiples parámetros. –