Gratta la risposta precedente (mantenuta sotto per i posteri). Dipende dall'implementazione del compilatore, ma con l'attuale compilatore MS C# 3.0, in realtà questo crea solo una singola istanza che viene riutilizzata per ogni istanza. È in grado di farlo perché i delegati sono immutabili e il delegato non richiede alcuna informazione dall'istanza.
Non so se fosse il caso del C# 2.0. È possibile decompilare il codice e verificare se l'IL utilizza effettivamente un campo memorizzato nella cache o meno. Utilizzando la risposta di seguito è un modo sicuro per garantire si creerà solo un'istanza però.
risposta originale:
Sì, crea un'istanza di un delegato. Questo richiederà un po 'di memoria. Si potrebbe ridurre questo:
public static class EventHandlers
{
public static readonly EventHandler Empty = delegate {};
}
public sealed class FtpManager
{
public event EventHandler LoggingIn = EventHandlers.Empty;
}
A quel punto ci sarà solo l'istanza, e si può fare riferimento da qualsiasi luogo. Lo svantaggio è che altre classi potrebbero quindi annullare l'iscrizione utilizzando lo stesso gestore. Se ti fidi che il resto della tua base di codice non lo faccia, questa è probabilmente la migliore scommessa dal punto di vista della memoria.
fonte
2009-03-31 21:00:55
Non dimenticare la chiamata di metodo aggiuntiva in questione. Chiamerai sia il gestore (i) dell'evento sia un metodo vuoto che assegni tramite il delegato anonimo. Non ho eseguito alcun test, ma almeno dovresti esserne a conoscenza ... –