Nie można zmodyfikować EventArgs w procedurach obsługi zdarzeń w celu przekazania informacji do klasy wywołującej zdarzenie?Korzystanie z EventArgs w celu przekazania informacji do wywołania klasy
Na przykład, jeśli mam niskopoziomową klasę komunikacyjną wymagającą sprawdzenia poprawności certyfikatu dla SSL, ale nie ma ona możliwości sprawdzenia, jak wygląda ważny certyfikat, ponieważ jest to wiedza różnych użytkowników tej klasy.
class ValidationEventArgs : System.EventArgs
{
public X509Certificate Certificate { get; set; }
public bool Valid { get; set; }
}
Następnie w obiektach wykorzystujących je podłączyć do zdarzenia i sprawdzić go w jakiś sposób zmienia flagę Valid
, aby wskazać, czy certyfikat jest dopuszczalne, czy nie.
comms.ValidationEvent += CertValidationHandler;
void CertValidationHandler(ValidationEventArgs args)
{
if (args.Certificate.Issuer.Contains(COMPANY_NAME)
args.Valid = true;
}
znalazłem references z EventArgs jest używany tak, ale widziałem też ludzi, mówiąc, że nie jest to zalecane.
Edytuj: Może powinienem wyjaśnić, że nie chodzi o dziedziczenie EventArgs, ale używanie ich jako dwukierunkowego kanału komunikacji. Jak zauważyli inni, jest to dopuszczalne, a jakikolwiek hałas, jaki Google podejmuje na odwrót, to prawdopodobnie ludzie, którzy źle zrozumieli/niewłaściwie wykorzystali tę koncepcję i teraz mają tę samą osobistą krucjatę przeciwko goto
.
Kto mówi, że nie jest to zalecane? Dzieje się tak cały czas w ramach. Spójrz na ['CancelEventArgs'] (http://msdn.microsoft.com/en-us/library/system.componentmodel.canceleventargs.aspx); to nie jest o wiele bardziej podstawowe. –
Googling dookoła Mam wrażenie, że posiadanie zmiennej EventArgs nie jest czymś, co należy zrobić, prawdopodobnie dlatego, że ktoś kiedyś nadużył go w niewłaściwy sposób. Dzięki –
Tak jak może mieć czas i miejsce, w których można z niego korzystać, używanie go w niewłaściwy sposób i miejsce jest złe, ale to nie czyni go złym. – MikeT