È disapprovato modificare EventArgs nei gestori di eventi allo scopo di passare di nuovo le informazioni alla classe che richiama l'evento?Utilizzo di EventArgs per passare le informazioni alla classe di richiamo
Per esempio se ho una classe di comunicazione di basso livello che ha bisogno di convalidare un certificato per SSL ma non ha modo di sapere che aspetto ha un certificato valido poiché questa è la conoscenza dei diversi utenti della classe.
class ValidationEventArgs : System.EventArgs
{
public X509Certificate Certificate { get; set; }
public bool Valid { get; set; }
}
Poi negli oggetti che utilizzano gancio fino alla manifestazione, e controllare in qualche modo cambiare la bandiera Valid
per indicare se il certificato è accettabile o meno.
comms.ValidationEvent += CertValidationHandler;
void CertValidationHandler(ValidationEventArgs args)
{
if (args.Certificate.Issuer.Contains(COMPANY_NAME)
args.Valid = true;
}
ho trovato references di EventArgs in uso come questo, ma ho anche visto gente dicendo che non è raccomandato.
Modifica: Forse dovrei chiarire che non si tratta di ereditare EventArgs, ma di utilizzarli come canale di comunicazione bidirezionale. Come altri hanno commentato, questo è accettabile e qualsiasi rumore di Google assuma l'opposto è probabilmente solo la gente che ha frainteso/usato impropriamente il concetto e ora ha la stessa crociata personale contro come goto
.
Chi dice che non è raccomandato? Questo succede tutto il tempo nel quadro. Guarda ['CancelEventArgs'] (http://msdn.microsoft.com/en-us/library/system.componentmodel.canceleventargs.aspx); non ha molto più di base. –
Googling around Ho la sensazione che avere EventArgs mutabile non sia qualcosa che si dovrebbe fare, probabilmente perché qualcuno lo ha abusato a un certo punto. Grazie –
Come per le cose, ha il tempo e il luogo per usarlo, usarlo nel modo sbagliato e il posto è cattivo, ma questo non lo rende negativo. – MikeT