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
Referencia
Clases y estructuras (Guía de programación de C#)
Constructores (Guía de programación de C#)