Che cosa significa il prefisso "on" in una funzione (ad esempio "onButtonPressed") significa?

2

A volte vedo alcune funzioni utilizzare "on" come prefisso, ad esempio, su un listener di pulsanti:

onButtonPressed();

e ci sono altri esempi:

onStateChanged();
onNotified();
onResume();

Il prefisso "on" ha un implicito significato semantico dietro di esso?

    
posta ggrr 06.10.2015 - 09:41
fonte

4 risposte

9

Il prefisso "on" è più spesso usato per indicare che il metodo è destinato ad essere usato come callback, cioè non chiamato direttamente, ma impostato come gestore per qualche evento.

Ad esempio, quando scrivi un metodo chiamato onClick , probabilmente non lo chiamerai direttamente, ma piuttosto ti aspetti che il toolkit della GUI lo chiamerà quando l'utente fa clic su un pulsante.

    
risposta data 06.10.2015 - 09:56
fonte
6

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 .

    
risposta data 06.10.2015 - 15:20
fonte
3

È solo uno dei molti significati della parola inglese "on", usata come preposizione. Indica quando si verifica l'azione. Quindi onButtonPressed() viene chiamato quando si preme il pulsante.

La funzione potrebbe essere rinominata whenButtonPressed() , ma è più lunga e non idiomatica

    
risposta data 06.10.2015 - 09:59
fonte
2

"OnXXX" è in genere qualcosa con eventi, ma piattaforme diverse hanno convenzioni di denominazione diverse, quindi il ruolo esatto dipende dalla lingua, che può generare confusione.

Nelle classi UI .net, un nome di metodo con il prefisso " On " è un metodo che provoca un evento da attivare. Ad esempio, Button.OnClick() è il metodo che attiva Click -event. I metodi OnXXX sono protetti, quindi è solo l'oggetto stesso che può generare gli eventi. Questo modello vale sia per i moduli Web, Windows Form e WPF.

Ma nel markup del controllo web asp.net, gli attributi denominati OnXXX hanno un significato diverso poiché essi registrano un gestore di eventi per l'evento. Per esempio. OnClick="Btn1_Click" registra il metodo Btn1_Click come gestore per l'evento Fai clic . In altre parole, l'attributo OnClick su un controllo web non corrisponde direttamente al metodo OnClick . Piuttosto corrisponde al codice Click += Btn1_Click . Onestamente, questo è un po 'confuso, e in XAML-markup la convenzione è cambiata, quindi il nome degli attributi che allegano gli eventi non ha il prefisso "On" ma corrisponde direttamente al nome dell'evento, ad es .: Click="Btn1_Click" .

In JavaScript, le convenzioni sono diverse. Qui onXXX è il nome di un evento gestore . Per esempio. button.onclick è un metodo che viene chiamato quando viene attivato l'evento click (piuttosto che un metodo che attiva l'evento come in .net). Gli attributi dell'handler di eventi in html sono anche denominati su XXX e allega un eventhandler, ad es. onclick="handleClick()" registra un gestore per l'evento click (come in Asp.net).

    
risposta data 09.10.2015 - 10:05
fonte

Leggi altre domande sui tag