2011-05-18 6 views

Respuesta

6

Los eventos son propiedades esenciales cuyos tipos son delegados. La intención de la palabra clave event es denotar qué son en realidad los eventos que un objeto dispara (es decir, funciones de devolución de llamada), frente a las propiedades que simplemente tienen un delegado. Esta distinción es importante para las herramientas de GUI que necesitan mostrar qué eventos puede disparar un objeto. Por supuesto, esto podría haberse hecho con una anotación, pero ese no era el diseño que se eligió para C#.

En a recent interview, Anders Hejlsberg (el creador de C#) menciona que si estuviera diseñando de nuevo, probablemente no haría los eventos tan especiales.

2

la palabra clave evento es un modificador de declaración delegado que le permite ser incluidos en una interfaz, limitaciones que invocación desde dentro la clase que lo declara, proporciona con un par de personalizable acceso (agregar y eliminar) y fuerza la firma del delegado (cuando se usó dentro del framework .NET).

ver here para una buena explicación.

+0

Bueno, en realidad se puede agregar una propiedad de delegado en una interfaz ... es básicamente lo mismo para mí – digEmAll

+0

como una propiedad sí, pero no como un campo público. – fearofawhackplanet

1

Un miembro declarado con la palabra clave event en realidad es un MulticastDelegate. La única especialidad es que, aunque declare el evento public, solo puede invocar el evento/delegado dentro de su clase. Esto se debe a que el compilador genera un campo privado que almacena el delegado y los métodos públicos para suscribirse y anular la suscripción del evento. Si utilizó directamente un Delegate, cualquier persona del exterior puede invocar al delegado en cualquier momento.

Así que un evento es en realidad una simple encapsulación de un delegado.

+0

Sí, esto me ayudó;) – user1859587

2

Eventos restringe cómo se puede manipular la lista de delegados, ya que solo puede agregar y eliminar delegados a través de los operadores += y -=. Los delegados, por otro lado, no tienen esta restricción por lo que dadas las definiciones a continuación.

public event DelegateType Events; 
public DelegateType Delegates; 

Usted puede hacer lo siguiente

instance.Delegates = null; // clear the list of delegates 

pero el compilador le impedirá hacer

instance.Events = null; // doesn't compile 

Cuando se compila el campo Events es en realidad private pesar de su declaración como public y el compilador simplemente agrega agregar/quitar métodos para manipular la lista.

Cuestiones relacionadas