En C# la forma más eficiente y segura de aplicar este patrón es la siguiente:
public sealed class Singleton
{    private Singleton() {}public static readonly Singleton Instance = new Singleton();
}
Es segura porque es el propio compilador el encargado de asegurar el Thread-Safe en la inicialización de la clase. Es eficiente porque evitamos la pérdida de rendimiento si utilizáramos una implementación mediante la cláusula volatile aplicando, por ejemplo, otro patrón interesante: Double Checked Lock. Veamos cómo:
public sealed class Singleton
{   private Singleton() {}private static volatile Singleton instance;
private static object syncRoot = new object();
public static Singleton Instance
   {get
     {if (Singleton.instance == null)
        {           lock (syncRoot)            {if (Singleton.instance== null)
              {                 Singleton.instance= new Singleton();}
}
}
        return Singleton.instance;}
}
}
Otra implementación podría aplicarse en genéricos a partir de Framework 2.0, ya que versiones anteriores no soportan esta característica en el lenguaje.
 

 
No hay comentarios:
Publicar un comentario