Comparteix a través de


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

Un constructor privado es un constructor de instancia especial. Normalmente se usa en clases que solo contienen miembros estáticos. Si una clase tiene uno o varios constructores privados y ningún constructor público, otras clases (excepto las clases anidadas) no pueden crear instancias de esta clase. Por ejemplo:

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

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

La declaración del constructor vacío impide la generación automática de un constructor sin parámetros. Tenga en cuenta que si no usa un modificador de acceso con el constructor, seguirá siendo privado de forma predeterminada. Sin embargo, el modificador privado normalmente se usa explícitamente para aclarar que no se pueden crear instancias de la clase.

Los constructores privados se usan para evitar la creación de instancias de una clase cuando no hay ningún campo o método de instancia, como la Math clase, 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 la posibilidad de hacer que la clase completa sea estática. Para obtener más información, vea Clases estáticas y miembros de clase estática.

Ejemplo

A continuación se muestra un ejemplo de una clase mediante un constructor privado.

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: {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

Consulte también