Raspe la respuesta anterior (se guarda a continuación para la posteridad). Depende de la implementación del compilador, pero bajo el compilador MS C# 3.0 actual, esto realmente solo crea una instancia única que se reutiliza para cada instancia. Puede hacerlo porque los delegados son inmutables y ese delegado no requiere ninguna información de la instancia.
No sé si este fue el caso con C# 2.0. Puede descompilar su código y ver si el IL realmente usa un campo en caché o no. Usar la respuesta a continuación es una forma segura de garantizar aunque solo creará una instancia.
Respuesta original:
Sí, se crea una instancia de un delegado. Eso llevará algo de memoria. Sin embargo, puede reducir eso:
public static class EventHandlers
{
public static readonly EventHandler Empty = delegate {};
}
public sealed class FtpManager
{
public event EventHandler LoggingIn = EventHandlers.Empty;
}
En ese momento solo habrá una instancia y podrá consultarla desde cualquier lugar. La desventaja es que otras clases podrían darse de baja usando el mismo controlador. Si confías en que el resto de tu código base no lo haga, esta es probablemente la mejor apuesta desde el punto de vista de la memoria.
No se olvide de la llamada de método adicional involucrada. Llamarás tanto al manejador de eventos como a un método vacío que asignas a través del delegado anónimo. No he realizado ninguna prueba, pero al menos deberías saberlo ... –