Me gustaría que alguien lo intente y explique la diferencia entre estos. Más específicamente, ejemplos de escenarios de uso.
Estoy refactorizando algún código de Windows Form y un Form
tiene algún código en el evento Form_Load()
y también en un evento protected override void OnLoad()
que llama a base.OnLoad(e);
Ahora lo rastreé y el Override se dispara primero y luego se dispara inmediatamente la versión del evento.
Entonces, ¿cuál se usa normalmente y por qué?
Siempre debe anular OnLoad (). Usar el evento solo es apropiado cuando otra clase estaría interesada en el evento. Para qué son los eventos. Otra clase interesada en el evento Load es muy rara, solo muy útil para hacer arreglos de ventanas.
Aún así, el evento Load funciona bien con el diseñador y los progtwigdores de VB6 están muy cómodos con él. No es terriblemente incorrecto, solo te meterías en problemas cuando comiences a heredar el formulario y el código no se ejecute en el orden correcto.
La mayoría del código que ahora se pone en el evento Load realmente pertenece al constructor. Solo necesita OnLoad si:
Al anular OnLoad
, la llamada a base.OnLoad
invoca el evento Load
-event of the Form.
protected override void OnLoad(EventArgs e) { // do stuff before Load-event is raised base.OnLoad(e); // do stuff after Load-event was raised }
Si no necesita realizar específicamente nada antes de que se OnLoad
Load-event, colocar el código en OnLoad
después de base.OnLoad(e)
proporciona el mismo comportamiento de tiempo de ejecución que colocarlo en el controlador de eventos Form_Load
.
Recomiendo anular el método en lugar de suscribirse al evento.
OnLoad
levanta el evento Load , que maneja Form_Load
. Vea el artículo de MSDN .
Entonces, en su código, al final de su función de inicialización, puede llamar a la función OnLoad
. La clase base llamará a los controladores de eventos ( Form_Load
en este caso), que puede haber configurado en su código de inicialización.
Personalmente, coloque mi código en Form_Init
y dejo OnLoad
para iniciar el evento, ya que estoy manejando el evento, aunque puedes defenderlo por un buen motivo, como puedes ver en tus respuestas.