2011-06-06 17 views
11
public delegate void SecondChangedHandler(
     object clock, 
     TimeInfoEventArgs timeInformation); 

    public event SecondChangedHandler SecondChanged; 

He escrito un reloj basado en este article. Ahora, si elimino la palabra clave del evento, obtengo el mismo resultado, ¿qué hace el evento realmente?¿Qué hace realmente la palabra clave del evento?

Respuesta

12

Se compiló de manera diferente. Esto hace que sea por lo que alguien no puede hacer

mySecondChangedHandler.SecondChanged = SomeMethod(...); //overwrite 
mySecondChangedHandler.SecondChanged(...); //invoke 

pero sólo

mySecondChangedHandler.SecondChanged += SomeMethod(...); 
mySecondChangedHandler.SecondChanged -= SomeMethod(...); 
+0

¡esa es realmente la answear que estaba buscando! : D eres un salvavidas :) –

+0

haz clic en la casilla de verificación junto a la respuesta para aceptarlo. Esto hace que sea más fácil para otros encontrar una solución cuando buscan. – Joel

2

La palabra clave evento hace dos cosas

  • suministró permisos. Sólo la clase puede provocar el evento, sin embargo, cualquier método externo puede invocar el delegado prima
  • Proporciona metadatos que pueden ser utilizados para los diseñadores y similares
1

Los event palabras clave se refiere únicamente a los métodos de la instancia que aloja el El campo SecondChanged puede invocarlo. Los intentos externos fallarán.

6

La palabra clave event crea un campo delegado privada, y un par de público event accessors llama add_EventName y remove_EventName. (details)

Esto significa que escribir EventName dentro de la clase devuelve la instancia de delegado, lo que le permite llamar o inspeccionar los controladores de eventos.

Fuera de la clase, EventName realmente no existe; todo lo que puede hacer es escribir EventName += something y EventName -= something, y el compilador lo convertirá en llamadas a los accesadores. (como una propiedad)

Para obtener más información, consulte this series of blog posts.

+0

esto debería ser una respuesta aceptada. –

1

La palabra clave event crea un par de accesadores para un delegado. Estos son efectivamente dos métodos (add y remove) a los que se llama cuando suscribe o cancela la suscripción del evento.

En su caso, está creando un "evento parecido a un campo". El compilador crea un delegado entre bastidores y le permite suscribirse y anular su suscripción de su lista de invocación. Esto significa que tiene toda la funcionalidad de un delegado, pero está restringiendo el acceso para que ese mundo externo pueda "manejar" el evento, pero no plantear el evento (invocar al delegado).

Sin embargo, también puede crear explícitamente sus propios descriptores de acceso para un evento, y estos pueden hacer otras cosas (aunque normalmente no se recomienda a menos que haya una buena razón para hacerlo).

Cuestiones relacionadas