Domanda

Una cosa che mi preoccupa è che ho scoperto due modi per registrare i delegati agli eventi.

  1. OnStuff += this.Handle;
  2. 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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top