Modificato per qualificare ed espandere la mia risposta dopo la conversazione nei commenti con @MetaFight
In quasi tutti i linguaggi che ho visto con gli eventi (JavaScript, ActionScript2 / 3) il prefisso on
viene utilizzato per indicare una procedura del gestore di eventi e un emit
, fire
o raise
prefisso è usato su un metodo che suscita un evento. ( On
potrebbe anche essere utilizzato in un nome di proprietà per indicare l'allegato di un callback, come nell'attributo onclick
HTML.)
C #, d'altra parte, sembra rompere questa convenzione in qualche modo.
Quando il prefisso On
viene utilizzato su un metodo in una classe base, in realtà spegne un evento:
public class Base
{
public delegate void OpeningEventHandler(Object sender, EventArgs e);
public event OpeningEventHandler Opening = delegate {};
protected virtual void OnOpening(EventArgs e)
{
Opening(this, e);
}
}
Quando questo metodo è sovrascritto in una classe derivata, l'override dovrebbe gestire l'evento, chiamando anche l'implementazione di base:
public class Derived : Base
{
protected override void OnOpening(EventArgs e)
{
// handle event here
base.OnOpening(e);
}
}
Questo è presumibilmente usato per abilitare una classe derivante ad annullare la propagazione dell'evento (non chiamando il metodo base).
Da la documentazione MSDN per il metodo Form.Onload
:
Remarks
...
The OnLoad method also allows derived classes to handle the event without attaching a delegate. This is the preferred technique for handling the event in a derived class.
Notes to Inheritors:
When overriding OnLoad in a derived class, be sure to call the base class's OnLoad method so that registered delegates receive the event.
C'è una domanda correlata su SO .