Lo que sigue es solo mi opinión personal, pero parece (obviamente) razonable para mí; Si observamos de cerca cómo trabajas usando .net y v studio, parece que la notación de tipo genérico parece tener alguna "belleza".
List<string> lst = new List<string>();
lst.Add("hello world");
Mientras que el código anterior es bastante simple, recto hacia adelante apoyado y bien por el sentido Intelli el manejador de sucesos "apariencia" duerma parece que clara. El soporte por defecto de intelli sugerirá solo el manejador de eventos, no su genérico. Además la notación sólo se ve terrible:
private event EventHandler<MyClass> SomeEvent;
private event EventHandler<AnotehrClass> OtherEvent;
privete event EventHandler<MoreClass> MoreEvents;
Mientras estructura hacia el código que se lee "manejador de sucesos" cada vez y su mente puede conectar a los delegados, por culpa que se utilizan para identificar la relación de tipos por sus nombres .
Por otro lado, también podría haber una explicación menos técnica y lógica:
En primer lugar, siempre obtendrá un objeto remitente en el método de manejo. Si bien esto parece útil a primera vista, siempre se usa cebada.
Además, sus argumentos tienen que derivar de EventArgs que pueden ser molestos o, a veces, imponerse debido al uso de componentes existentes.
Aparte de los genéricos típicos (por ejemplo, IList/List) se pierde la posibilidad de utilizar un tipo más abstracto (como una interfaz) o simplemente un tipo simple (como un doble).
Por último, pero no menos importante, existen las reglas/sugerencias de notación presentadas por microsoft. Para su ejemplo sobre el evento enrutado, la regla podría decir que su tipo está "marcado" como enrutado al tener su nombre con la palabra "Enrutado". Mientras que el nombre del evento en sí mismo dice que el nombre comienza con una "Vista previa".
Como mencioné: esto es solo mi opinión, así que no me culpes;)
Sospecho que la introducción de 'EventHandler' fue un mal momento. Para el momento en que se introdujo, el otro patrón (delegados explícitamente nombrados) estaba firmemente establecido y comenzar un cambio hacia el tipo de delegado genérico podría haber sido visto como un desastre aún mayor (llevando a los programadores confundidos a preguntar: "¿Qué fue eso? delegar llamado de nuevo? 'FooEventHandler' o' EventHandler '?" _) - Lo que me da curiosidad si el cambio hacia 'IEvent '(introducido por F # y el framework Rx) funcionará. –
stakx
WPF se inició en julio de 2003, mucho antes de que estuvieran disponibles los genéricos. Lo mismo ocurre con las formas de Windows, por supuesto. –