Constructores privados (Guía de programación de C#)

Actualización: noviembre 2007

Un constructor private es un caso especial de constructor de instancia. Se utiliza generalmente en clases que contienen sólo miembros estáticos. Si una clase tiene uno o más constructores privados y ningún constructor público, el resto de clases (excepto las anidadas) no podrán crear instancias de esta clase. Por ejemplo:

class NLog
{
    // Private Constructor:
    private NLog() { }

    public static double e = Math.E;  //2.71828...
}

La declaración de un constructor vacío evita la generación automática de un constructor predeterminado. Observe que si no utiliza un modificador de acceso en el constructor, éste será private de manera predeterminada. Sin embargo, normalmente se utiliza el modificador private de manera explícita para aclarar que no es posible crear una instancia de la clase.

Los constructores privados se utilizan para evitar la creación de instancias de una clase cuando no hay campos o métodos de instancia, por ejemplo, la clase Math, o cuando se llama a un método para obtener una instancia de una clase. Si todos los métodos de la clase son estáticos, considere convertir la clase completa en estática. Para obtener más información, vea Clases estáticas y sus miembros (Guía de programación de C#).

Ejemplo

El siguiente es un ejemplo de clase que utiliza un constructor private.

public class Counter
{
    private Counter() { }
    public static int currentCount;
    public static int IncrementCount()
    {
        return ++currentCount;
    }
}

class TestCounter
{
    static void Main()
    {
        // If you uncomment the following statement, it will generate
        // an error because the constructor is inaccessible:
        // Counter aCounter = new Counter();   // Error

        Counter.currentCount = 100;
        Counter.IncrementCount();
        Console.WriteLine("New count: {0}", Counter.currentCount);

        // Keep the console window open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}
// Output: New count: 101

Observe que si quita el comentario de la siguiente instrucción del ejemplo, se producirá un error porque el constructor es inaccesible debido a su nivel de protección:

// Counter aCounter = new Counter();   // Error

Especificación del lenguaje C#

Para obtener más información, vea las secciones siguientes de Especificación del lenguaje C#.

  • 10.11.5 Constructores privados

  • 10.1.1.3 Clases estáticas

Vea también

Conceptos

Guía de programación de C#

Referencia

Clases y estructuras (Guía de programación de C#)

Constructores (Guía de programación de C#)

Destructores (Guía de programación de C#)

private (Referencia de C#)

public (Referencia de C#)