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:
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:
Nada de copiar y pegar. Cool eh? 🙂
Link de la solución: Tip3.zip
Salu2
Héctor Uriel Pérez Rojas
muy didáctico 🙂 se agradece…
😀 gracias por el comentario, buen día =)
muy bueno che