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