2012-07-30 10 views
8

C'è una differenza qui?C'è una differenza tra questi 2 modi di rimuovere un gestore di eventi?

Button1.Click -= new EventHandler(Button1_Click); 

e

Button1.Click -= Button1_Click; 

Il secondo metodo non sembra funzionare per me, ma l'ho visto usato quando Google-ing 'come rimuovere un gestore di eventi'. Modifica: In realtà nessuno dei due lavora per me, anche dovrebbe funzionare in modo intercambiabile?

Aggiornamento:

Il motivo questi non sembra funzionare per me è perché ho avuto AutoPostBack = true sui miei comandi. Non stavo impostando i breakpoint per vedere se gli eventi sono stati chiamati, ho solo guardato il browser per vedere se è stato aggiornato (ovvero un postback).

+0

@MarkByers No, in realtà, ho aggiornato la mia domanda per mostrarlo. Molto astuto da parte tua! – Dean

+0

Sembra che la firma "Button1_Click' possa essere sbagliata. Il codice funzionava per aggiungerli? – Enigmativity

+0

@Enigmativity Ho aggiunto i gestori di eventi nel markup nel front-end della mia pagina di aspx quindi non ci sono stati problemi. Ho aggiornato la mia domanda per spiegare l'errore che ho fatto nell'assumere che questo codice non funzionasse quando si trattava di qualcos'altro. – Dean

risposta

8

Questi due pezzi di codice sono uguali. La seconda sintassi (chiamata "conversione del gruppo metodo") era una nuova funzionalità aggiunta in C# 2.0.

+4

Penso che il primo sia un po 'fuorviante. Non mi sembra di rimuovere quello esistente. Forse quel sacco di principianti lo trova irritante. – dowhilefor

+0

@dowhilefor Non mi considero più un principiante, ma ancora non mi piace la prima sintassi. Rimozione di un riferimento a un oggetto da un elenco perché tento di rimuovere un oggetto diverso che ha lo stesso valore sembra ancora un hack. – Yaur

+0

@Yaur mi dispiace non stavo insinuando che tu fossi un principiante, era solo un'ipotesi che potesse essere irritante per le altre persone che imparavano la lingua. Ma sono d'accordo, non penso sia ovvio per nessuno. Per essere onesti, ho dovuto controllare cosa succede esattamente un paio di mesi fa, perché non ne ero più sicuro nemmeno io. – dowhilefor

0

Funzionalmente, no. Non c'è differenza tra i due. Per quanto riguarda il problema di non funzionare, se si tratta di un'app ASP.NET, è possibile disabilitare il collegamento automatico degli eventi nella pagina aspx.

Problemi correlati