Constructores privados en C#

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *