Fundamentos de la POO con C# [5/10]: Los Constructores
Aprovecha todo el potencial que te brinda este método especial y domina los conceptos 🔥

En esta oportunidad aprenderemos sobre los constructores, así que arrancamos ya mismo! 🔥

Contenido de la Serie de artículos

Estos son todos los temas de la serie:

  1. 1. La Programacion orientada a objetos (POO) y el diseño orientado a objetos (DOO)
  2. 2. Los requerimientos: funcionales y no funcionales
  3. 3. Objetos y clases
  4. 4. Tipos de datos en C#: Por valor y por referencia
  5. 5. Constructores
  6. 6. Signaturas e Interfaces
  7. 7. Clases especiales: estáticas y abstractas
  8. 8. Modificadores de acceso
  9. 9. Los 4 Pilares de la POO: Herencia, abstracción, encapsulamiento y polimorfismo
  10. 10. Los Principios SOLID
Foto de Kevin Jarrett en Unsplash

Qué es un constructor?

Es un método especial que nos garantiza una correcta instanciamiento de una clase.

Este método se ejecuta de forma automática cuando creamos un objeto, o lo que es lo mismo, al instanciar una clase.

En una misma clase podemos tener más de un constructor o podemos no especificarlo, en ese caso el entorno .NET creará uno por defecto.

Aquel constructor que no tiene parámetros se le conoce como constructor por defecto.

Hace un tiempo escribí un artículo sobre constructores también, si quieres echarle un vistazo aquí está 😉

Veamos como luce en código

Imaginemos que tenemos la clase Alumno:

    public class Alumno
    {
        public int Id { get; set; }
        public string Nombre { get; set; }
        public DateTime FechaMatricula { get; set; }        
    }

Tal como está podemos hacer uso de ella, ya que, como hemos mencionado .NET creará un constructor por defecto si no lo hemos definido, pero vamos a definirlo explícitamente, entonces nuestra clase lucirá así ahora:

    public class Alumno
    {
        /* CONSTRUCTOR */
        public Alumno()
        {
            Console.WriteLine("Un objeto de la clase Alumno se ha creado");
        }

        public int Id { get; set; }
        public string Nombre { get; set; }
        public DateTime FechaMatricula { get; set; }        
    }

Para poder probar, he añadido un Console.WriteLine, ahora vamos a instanciar nuestra clase Alumno desde el método Main de la clase Program:

class Program
{
    static void Main()
    {
        var alumno = new Alumno();
    }    
}

Recuerda que si estás trabajando en .NET 6 Visual studio no te creará la clase program ni el método Main, pero tú puedes hacerlo manualmente y continuar trabajando en él como siempre.

Si ejecutamos el programa tenemos:

Excelente, entonces estamos confirmando que el constructor se llama automáticamente ni bien se crea un objeto en la clase que lo definió.

Probando varios constructores

Es posible tener tantos constructores como necesitemos, siempre y cuando los parámetros sean distintos.

Por ejemplo aquí he creado dos:

    public class Alumno
    {
        /* CONSTRUCTORES */
        public Alumno()
        {
            Console.WriteLine("Un objeto de la clase Alumno se ha creado");
        }
        public Alumno(int id, string Nombre, DateTime fechaMatricula)
        {
            this.Id = id;
            this.Nombre = Nombre;
            this.FechaMatricula = fechaMatricula;
        }

        public int Id { get; set; }
        public string Nombre { get; set; }
        public DateTime FechaMatricula { get; set; }        
    }

Y gracias al concepto en POO llamado Sobrecarga u Overloading, al crear un objeto de la clase C# me presenta 2 opciones para hacerlo 😉

En conclusión

Dentro de las ventajas que ofrecen los constructores destacan:

  • Inicializar variables, esto es especialmente útil cuando la variable es de tipo por referencia ya que inicializarla previene el error: NullReferenceException
  • Dar comportamiento personalizado o ejecutar lógica de negocio al crear objetos de cualquier clase

Por ahora eso es todo crack, comparte esta entrada y nos vemos en el siguiente artículo 😉

Deja una respuesta

Tu dirección de correo electrónico no será publicada.