2011-10-17 12 views
8

Estaba solo metido en la documentación de XNA para el Game class y noté que hay un evento Deactivated y un método virtual OnDeactived que se puede anular.¿Anula el método virtual o crea el controlador de eventos?

Tanto la creación de un controlador de eventos para el evento Deactivated y reemplazando el método virtual de OnDeactived permite al cliente para manejar el juego de perder el foco.

Me preguntaba qué enfoque se debe utilizar en general para manejar el juego perdiendo el foco. ¿Crear un controlador de eventos o anular el método virtual? ¿Hay alguna diferencia entre cada enfoque?

Respuesta

7

Hay dos diferencias obvias:

  • Sólo se puede anular OnDeactivated dentro de una clase derivada de la declarándolo - mera "otro" código sólo puede utilizar el evento
  • Dentro OnDeactived, que depende de usted puede decidir si llama o no al base.OnDeactivated - puede suprimir efectivamente el evento o cambiar los parámetros; invocarlo antes o después de su propio código, etc.

Si ya está derivada de la clase, de cualquier manera funcionaría - personalmente me gustaría utilizar probablemente el evento más a menudo que no, a menos que quería tomar cualquier otro tipo de acción que solo se puede realizar anulando. Aparte de cualquier otra cosa, eso hace que el código sea más portátil si quieres moverlo a otro lugar. Por otra parte, en general, no soy seguidor de la herencia, así que estoy predispuesto :)

+0

Gracias por la respuesta rápida y precisa! –

+1

+1 si por nada más que por "Por otra parte, en general, no soy seguidor de la herencia" –

1

La decisión de anular el método o utilizar el controlador de eventos muchas veces se reduce a la cantidad de control que necesita tener sobre lo que sucede durante la ejecución de ese método. Al anular el método, se obtiene el control total del método, mientras que el controlador de eventos solo se ejecuta después de que se haya ejecutado el método.

Si necesita un alto nivel de control sobre lo que sucede durante ese método, le aconsejo que anule el método. Si simplemente necesita ejecutar algún código después de la ejecución del método, usaría el controlador de eventos.

protected override void OnDeactivated(EventArgs e) 
{ 
    //run some code before execution (anything that could effect execution) 

    //call the base method and fire the event 
    base.OnDeactivated(e); 

    //run some code after execution 
} 
Cuestiones relacionadas