Tips para programar Orientado a Objetos con C#.- Tip #3: Ten un constructor central

Hola, tercera tip para programar Orientado a Objetos en C#, cualquier duda o comentario, háganmelo saber 🙂

Contexto:

Es muy común en las aplicaciones .Net, tener clases que tengan constructores de diversas firmas, es decir, que puedan ser llamadas de distintas formas. Un ejemplo, tomado de las clases del .NET Framework, es la clase SqlCommand, la cual tiene varios parámetros con los cuales puede ser inicializado:

image

Como puedes ver, cuando trabajas con esta clase, puedes llamar a la misma pasándole ningún parámetro, una cadena como parámetro, o bien un cadena y un objeto del tipo SqlConnection, para los que no lo sepan, a esto se le llama overloading (o sobrecarga en español), y nos sirve para tener un mismo método con el mismo nombre, pero que reciba diferentes parámetros.

Hagamos nosotros un ejemplo de esto, creemos una nueva clase, con 3 propiedades, y 1 constructor, que será básicamente lo que hemos visto en el tip # 2:

   1: class Cliente

   2: {

   3:     public string Nombre { get; set; }

   4:     public int Edad { get; set; }

   5:     public decimal Efectivo { get; set; }

   6:  

   7:     public Cliente(string _nombre, int _edad, decimal _efectivo)

   8:     {

   9:         this.Nombre = _nombre;

  10:         this.Edad = _edad;

  11:         this.Efectivo = _efectivo;

  12:     }

  13: }

A esta clase, le agregaremos un nuevo constructor, el cual tendrá una sobrecarga de 2 parámetros, y en el cual, inicializaremos el valor efectivo a 0:

 

   1: class Cliente

   2: {

   3:     public string Nombre { get; set; }

   4:     public int Edad { get; set; }

   5:     public decimal Efectivo { get; set; }

   6:  

   7:     public Cliente(string _nombre, int _edad, decimal _efectivo)

   8:     {

   9:         this.Nombre = _nombre;

  10:         this.Edad = _edad;

  11:         this.Efectivo = _efectivo;

  12:     }

  13:  

  14:     public Cliente(string _nombre, int _edad)

  15:     {

  16:         this.Nombre = _nombre;

  17:         this.Edad = _edad;

  18:         this.Efectivo = 0.00M;

  19:     }

  20: }

¿Y si tuviéramos otro constructor que no recibiera parámetros y quisiéramos inicializar todo a 0? ¿Qué tal otro constructor que solo reciba un parámetro? Y si tuvieras un constructor que tuviera 10 parámetros y tuviéramos que inicializar cada propiedad mediante la asignación de estos parámetros? Tendríamos que empezar a copiar y a pegar el código de cada constructor. Se dice que cuando se empieza a repetir nuestro código, algo está mal.

Mucho lío ¿No?

Solución:

Crear un constructor central, que haga todo el trabajo, y que sea solamente llamado en los constructores que deriven de él.

Así es, en nuestro ejemplo, tomaremos como constructor base el primer constructor con 3 parámetros, y lo único que haremos, será usarlo en nuestro segundo constructor de la siguiente manera:

   1: public Cliente(string _nombre, int _edad) 

   2:             : this(_nombre, _edad, 0.00M)

Esa es la manera de crear constructores que usen a uno principal. Para que veas que tanto se simplifica el código, aquí dejo el código para crear los constructores con ninguno, uno, dos y tres parámetros.

   1: class Cliente

   2: {

   3:     public string Nombre { get; set; }

   4:     public int Edad { get; set; }

   5:     public decimal Efectivo { get; set; }

   6:  

   7:     public Cliente(string _nombre, int _edad, decimal _efectivo)

   8:     {

   9:         this.Nombre = _nombre;

  10:         this.Edad = _edad;

  11:         this.Efectivo = _efectivo;

  12:     }

  13:     

  14:     public Cliente(string _nombre, int _edad) 

  15:         : this(_nombre, _edad, 0.00M)

  16:     {

  17:     }

  18:     public Cliente(string _nombre)

  19:         : this(_nombre, 18, 0.00M)

  20:     {

  21:     }

  22:     public Cliente()

  23:         : this("Héctor", 18, 0.00M)

  24:     {

  25:     }

  26: }

Ahora sí, tenemos disponibles diferentes inicializaciones para nuestra clase:

image

Nada de copiar y pegar. Cool eh? 🙂

Link de la solución: Tip3.zip

Salu2

Héctor Uriel Pérez Rojas

3 comentarios en “Tips para programar Orientado a Objetos con C#.- Tip #3: Ten un constructor central”

Deja un comentario

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