Requisito previo: Constructores en C#
Private Constructor es un constructor de instancia especial presente en el lenguaje C#. Básicamente, los constructores privados se usan en clases que contienen solo miembros estáticos. El constructor privado siempre se declara mediante una private
palabra clave.
Puntos importantes:
- Es la implementación de un patrón de clase singleton.
- Use un constructor privado cuando la clase solo tenga miembros estáticos.
- El uso de un constructor privado impide la creación de instancias de esa clase.
- Si una clase contiene solo un constructor privado sin parámetro, evita la generación automática del constructor predeterminado.
- Si una clase contiene solo constructores privados y no contiene un constructor público, entonces otras clases no pueden crear instancias de esa clase, excepto la clase anidada.
Sintaxis:
private constructor_name { // Code }
Nota: si no usamos ningún modificador de acceso para definir un constructor, entonces el compilador toma ese constructor como privado.
Ejemplo 1:
// C# program to illustrate the // concept of private Constructor using System; public class Geeks { // Private constructor // without parameter private Geeks() { Console.WriteLine("Private Constructor"); } } // Driver Class class GFG { // Main Method static void Main() { // This line raise error because // the constructor is inaccessible Geeks obj = new Geeks(); } }
Error de tiempo de compilación:
prog.cs(40, 13): error CS0122: `Geeks.Geeks()’ es inaccesible debido a su nivel de protección
Explicación: En el ejemplo anterior, tenemos una clase llamada Geeks. La clase Geeks contiene el constructor privado, es decir, private Geeks()
. En el método Main, cuando intentamos acceder al constructor privado usando esta declaración Geeks obj = new Geeks();
, el compilador dará un error porque el constructor es inaccesible.
Ejemplo 2:
// C# program to illustrate the // concept of private Constructor using System; class Geeks { // Variables public static string name; public static int num; // Creating private Constructor // using private keyword private Geeks() { Console.WriteLine("Welcome to Private Constructor"); } // Default Constructor // with parameters public Geeks(string a, int b) { name = a; num = b; } } // Driver Class class GFG { // Main Method static void Main() { // This line raises error because // the constructor is inaccessible // Geeks obj1 = new Geeks(); // Here, the only default // constructor will invoke Geeks obj2 = new Geeks("Ankita", 2); // Here, the data members of Geeks // class are directly accessed // because they are static members // and static members are accessed // directly with the class name Console.WriteLine(Geeks.name + ", " + Geeks.num); } }
Producción:
Ankita, 2
Explicación: El ejemplo anterior contiene una clase llamada Geeks . Esta clase Geeks contiene dos variables estáticas, es decir , nombre y número y dos constructores, uno es un constructor privado, es decir, private Geeks()
y otro es un constructor predeterminado con dos parámetros, es decir, public Geeks(string a, int b)
. En el método Main, cuando tratamos de invocar al constructor privado usando esta declaración Geeks obj1 = new Geeks();
, dará un error porque el constructor privado no permite crear instancias de la clase Geeks. Se invocará el único constructor predeterminado.
Publicación traducida automáticamente
Artículo escrito por ankita_saini y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA