È sicuro aggiungere delegati agli eventi con la parola chiave new?
Domanda
Una cosa che mi preoccupa è che ho scoperto due modi per registrare i delegati agli eventi.
- OnStuff += this.Handle;
- OnStuff += new StuffEventHandler(this.Handle);
Il primo è pulito e ha senso fare "onstuff -= this.handle;" per disgustare dall'evento ...Ma in quest'ultimo caso, dovrei fare "OnStuff -= new StuffEventHandler(this.Handle);"?Sembra che non stia rimuovendo nulla, dal momento che sto inserendo un altro riferimento a StuffEventHandler.L'evento mette a confronto il delegato per riferimento?Sono preoccupato di poter avviare un brutto pool di memoria qui.Mi prendi?Non ho il riferimento al "nuovo StuffEventHandler" che avevo precedentemente registrato.
Qual è lo svantaggio di fare il numero 1?
Qual è il vantaggio di fare il punto 2?
Soluzione
Non devi preoccuparti di mantenere un riferimento al delegato originariamente registrato e non avvierai un "brutto pool di memoria".
Quando chiami "OnStuff -= new StuffEventHandler (this.handle);" Il codice di rimozione lo fa non confronta il delegato che stai rimuovendo per riferimento:verifica l'uguaglianza confrontando i riferimenti ai metodi di destinazione che il delegato chiamerà e rimuove i delegati corrispondenti da "OnStuff".
A proposito, "OnStuff" stesso è un oggetto delegato (la parola chiave dell'evento che presumo tu abbia nella tua dichiarazione limita semplicemente l'accessibilità del delegato).
Altri suggerimenti
Il numero uno è solo una scorciatoia che genererà lo stesso MSIL del secondo, al momento della compilazione esaminerà questo. Gestisci e deduci il delegato per istanziare.Ma non dovresti mai annullare l'iscrizione utilizzando new.
Quindi non c'è differenza tra i due, solo un po' di zucchero sintattico per rendere il nostro codice più pulito.
Avevo l'impressione che 2 fosse solo zucchero sintattico.Dovrebbero essere esattamente la stessa cosa.
Se non ricordo male la prima alternativa è mero zucchero sintattico per la seconda.