¿Qué es un singleton en C#?

Resuelto Sergio Tapia asked hace 14 años • 15 respuestas

¿Qué es un Singleton y cuándo debo usarlo?

Sergio Tapia avatar Jan 28 '10 22:01 Sergio Tapia
Aceptado

Un singleton es una clase que sólo permite crear una instancia de sí misma y proporciona un acceso sencillo y fácil a dicha instancia. La premisa singleton es un patrón en todo el desarrollo de software.

Hay una implementación de C# "Implementación del patrón Singleton en C#" que cubre la mayor parte de lo que necesita saber, incluidos algunos buenos consejos sobre la seguridad de subprocesos .

Para ser honesto, es muy raro que necesites implementar un singleton; en mi opinión, debería ser una de esas cosas que debes tener en cuenta, incluso si no se usa con demasiada frecuencia.

Daniel May avatar Jan 28 '2010 15:01 Daniel May

Pediste C#. Ejemplo trivial:


public class Singleton
{
    private Singleton()
    {
        // Prevent outside instantiation
    }

    private static readonly Singleton _singleton = new Singleton();

    public static Singleton GetSingleton()
    {
        return _singleton;
    }
}
Chris Simmons avatar Jan 28 '2010 15:01 Chris Simmons

Qué es: una clase para la cual hay solo una instancia persistente durante toda la vida útil de una aplicación. Consulte Patrón Singleton .

Cuándo debes usarlo: Lo menos posible. Sólo cuando esté absolutamente seguro de que lo necesita. Soy reacio a decir "nunca", pero normalmente hay una alternativa mejor, como la inyección de dependencia o simplemente una clase estática.

Aaronaught avatar Jan 28 '2010 15:01 Aaronaught

Otra forma de implementar singleton en C#, personalmente prefiero esta manera porque puedes acceder a la instancia de la clase singeton como una propiedad en lugar de un método.

public class Singleton
    {
        private static Singleton instance;

        private Singleton() { }

        public static Singleton Instance
        {
            get
            {
                if (instance == null)
                    instance = new Singleton();
                return instance;
            }
        }

        //instance methods
    }

pero bueno, hasta donde yo sé, ambas formas se consideran "correctas", por lo que es solo una cuestión de gusto personal.

Marnix v. R. avatar Dec 15 '2011 23:12 Marnix v. R.