15/06/2023 - TheRunningMan ha scritto:
Button1Clicked+= () => Results(PulsantePremuto.Niente);
Qualcosa di questo tipo:
var myCallback = () => Results(PulsantePremuto.Niente);
// ...
Button1Clicked+= myCallback;
Button1Clicked-= myCallback;
In pratica, quando crei l'espressione che restituisce un valore vero e proprio (la funzione stessa da richiamare), prima di assegnarla all'evento la salvi in una variabile.
Usando quel riferimento in aggiunta e rimozione dell'evento, dovrebbe funzionare.
Questo però lo vedo più come un escamotage particolare, nel senso che si dovrebbe capire lo scenario generale e vedere se si adatta bene, o se dato l'obiettivo ci sono strade più sicure, leggibili e manutenibili, ad esempio creando un metodo nella classe che assegna l'evento.
Il fatto che si possa assegnare un gestore di evento “al volo” usando una espressione lambda al posto di creare un metodo nella classe non significa che quella soluzione vada adottata sempre: in certi casi, meglio ripiegare su soluzioni più sicure e strutturate.
Ad ogni modo, l'indicazione era per spiegare il concetto: se vuoi togliere un gestore che hai aggiunto, devi usare lo stesso riferimento, quindi la funzione che assegni deve avere una locazione fissa, o perché è un metodo di un oggetto noto, o perché quando hai creato la funzione usando la sintassi dell'espressione lambda ti sei tenuto il suo riferimento da qualche parte (nell'esempio sopra ho usato una variabile, ma può essere un campo della classe o qualsiasi altra cosa).
Ciao! :)