Das Folgende ist nur meine persönliche Meinung, aber es scheint (offensichtlich) für mich vernünftig; Wenn wir uns genauer ansehen, wie Sie mit .net und v studio arbeiten, scheint es, als ob die generische Typnotation etwas "Schönheit" verliert.
List<string> lst = new List<string>();
lst.Add("hello world");
Während der Code oben ist ziemlich einfach, geradlinig und gut durch intelli Sinn des Eventhandler „Look and Feel“ muß nicht so klar erscheinen unterstützt. Die Standard-Intelli-Unterstützung schlägt nur den EventHandler vor, nicht seinen generischen. Weiterhin ist die Notation sieht einfach awfull:
private event EventHandler<MyClass> SomeEvent;
private event EventHandler<AnotehrClass> OtherEvent;
privete event EventHandler<MoreClass> MoreEvents;
Während der Code überblickend werden Sie jedes Mal, und Ihre Gedanken lesen „Eventhandler“ könnte diese Delegierten verbinden, beacuse Sie die Beziehung von Typen durch ihre Namen werden verwendet, um zu identifizieren .
Auf der anderen Seite könnte es auch eine weniger isotechnische und technischere Erklärung geben:
Zunächst erhalten Sie immer ein Absenderobjekt in der Handling-Methode. Während dies auf den ersten Blick nützlich scheint - es ist Gerste jemals verwendet.
Weitere Argumente müssen von EventArgs abgeleitet werden, die aufgrund der Verwendung vorhandener Komponenten störend oder manchmal auch nur unveränderbar sind.
Anders als die typischen Generika (z. B. IList/List) Sie die Möglichkeit, einen abstrakteren Typ (wie eine Schnittstelle) oder nur einen einfachen Typ (wie ein Doppel) zu verwenden.
Zu guter Letzt gibt es noch die Notationsregeln/Vorschläge, die von Microsoft eingeführt wurden - für Ihr Beispiel zum gerouteten Ereignis würde die Regel sagen, dass ihr Typ "markiert" wurde, indem ihr Name mit dem Wort "Routed" angezeigt wurde. Während die Benennung für das Ereignis selbst sagt, dass der Name mit einer "Vorschau" beginnt.
Wie ich schon sagte: das ist nur meine Meinung, also beschuldige mich nicht;)
Ich vermute, die Einführung von 'EventHandler' war nur schlechtes Timing. Zu der Zeit, als es eingeführt wurde, war das andere Muster (ausdrücklich Delegierte genannt) fest etabliert und eine Verschiebung in Richtung des generischen Delegattyps könnte als ein noch größeres Durcheinander angesehen worden sein (indem es zu verwirrten Programmierern führte, die fragten) "Was war das? Delegat erneut aufgerufen? 'FooEventHandler' oder' EventHandler '?" _) - Was mich neugierig macht, ob die Verschiebung in Richtung 'IEvent ' (eingeführt von F # und dem Rx-Framework) funktioniert. –
stakx
WPF wurde im Juli 2003 gestartet, lange bevor Generika verfügbar waren. Dasselbe gilt natürlich auch für Windows Forms. –