¿Está mal modificar EventArgs en controladores de eventos con el fin de pasar información a la clase que invoca el evento?Uso de EventArgs para pasar información a la clase invocadora
Por ejemplo, si tengo una clase de comunicación de bajo nivel que necesita validar un certificado para SSL pero no tiene forma de saber cómo es un certificado válido ya que es el conocimiento de los diferentes usuarios de la clase.
class ValidationEventArgs : System.EventArgs
{
public X509Certificate Certificate { get; set; }
public bool Valid { get; set; }
}
Luego, en los que utilizan objetos que conectar con el evento, y comprobar que de alguna manera cambiar la bandera Valid
para indicar si el certificado es aceptable o no.
comms.ValidationEvent += CertValidationHandler;
void CertValidationHandler(ValidationEventArgs args)
{
if (args.Certificate.Issuer.Contains(COMPANY_NAME)
args.Valid = true;
}
he encontrado references de EventArgs siendo utilizados como este, pero también he visto a la gente diciendo que no es recomendable.
Editar: Tal vez debería aclarar que no se trata de heredar EventArgs, sino de usarlos como un canal de comunicación bidireccional. Como otros comentaron, esto es aceptable y cualquier ruido que Google elija es probablemente solo que la gente haya malinterpretado o utilizado mal el concepto y ahora tiene la misma cruzada personal contra goto
.
¿Quién dice que no es recomendable? Esto sucede todo el tiempo en el marco. Mire ['CancelEventArgs'] (http://msdn.microsoft.com/en-us/library/system.componentmodel.canceleventargs.aspx); no es mucho más básico que eso. –
Buscando en Google Tengo la sensación de que tener EventArgs mutables no es realmente algo que uno debería hacer, probablemente porque alguien lo ha usado mal en algún momento. Gracias –
Al igual que las cosas, tiene un lugar y tiempo para usarlo, usarlo de la manera incorrecta y el lugar es malo, pero eso no lo hace malo. – MikeT