Tips para programar Orientado a Objetos con C#.- Tip #2: Crea y Usa Constructores

image

 

Segundo Tip para programar Orientado a Objetos con C#, espero que a mas de uno le sirva🙂

Contexto:

En el ejemplo del tip # 1, hemos creado una clase Cliente, el cual tiene 3 propiedades (Nombre, Edad y Cuenta). Cuando hemos hecho uso de esta clase, ha sido de la siguiente forma:

   1: static void Main(string[] args)

   2: {

   3:     Cliente cliente = new Cliente();

   4:     cliente.Nombre = "Héctor";

   5:     cliente.Edad = 23;

   6:     cliente.Cuenta = 22312;

   7:     System.Console.WriteLine(cliente);

   8: }

Como podemos ver, tenemos que inicializar explícitamente cada una de las propiedades (cliente.Nombre=”Héctor; ….).

Imagina que tienes que crear una lista de Clientes, e inicializarla desde el inicio, una posible solución sería esta:

   1: public List<Cliente> RellenarLista()

   2: {

   3:     List<Cliente> lista = new List<Cliente>();

   4:  

   5:     Cliente cliente1 = new Cliente();

   6:     cliente1.Nombre = "Héctor";

   7:     cliente1.Edad = 23;

   8:     cliente1.Cuenta = 1111;

   9:     lista.Add(cliente1);

  10:  

  11:     Cliente cliente2 = new Cliente();

  12:     cliente2.Nombre = "Vianey";

  13:     cliente2.Edad = 23;

  14:     cliente2.Cuenta = 1111;

  15:     lista.Add(cliente2);

  16:  

  17:     Cliente cliente3 = new Cliente();

  18:     cliente3.Nombre = "Anahí";

  19:     cliente3.Edad = 23;

  20:     cliente3.Cuenta = 1111;

  21:     lista.Add(cliente3);

  22:  

  23:     return lista;

  24: }

Ahora imagina, si fueran decenas de clientes los que tuvieras que inicializar, esto se vuelve cada vez mas complicado, con la sintaxis que hemos estado utilizando.

Solución:

El tip de este día es, crear constructores para inicializar los valores de las propiedades una vez creada la clase. ¿Cómo se hace esto?

A través de un constructor. Un constructor es un método que se ejecutará cuando la clase sea instanciada. Si no está declarado uno por nosotros, el .NET  Framework creará uno por nosotros.

Primero debemos modificar nuestra clase Clientes, creando un constructor. Un constructor tiene la forma:

   1: Class Cliente

   2: {

   3:     public Cliente()

   4:     {

   5:     }

   6: }

Como puedes ver, es parecido a un método, toma el mismo nombre que la clase, y no tiene ningún tipo de retorno. Este constructor será llamado cuando se utilice la palabra new.

Para nuestro ejemplo, debemos modificar nuestro constructor, de tal forma que podamos inicializar nuestras propiedades (Nombre, Edad y Cuenta), una vez que sea creada la instancia de la clase. Esto lo logramos de la siguiente manera:

   1: class Cliente

   2: {

   3:     public string Nombre { get; set; }

   4:     public int Edad { get; set; }

   5:     public int Cuenta { get; set; }

   6:  

   7:     public Cliente(string _nombre, int _edad, int _cuenta)

   8:     {

   9:         this.Nombre = _nombre;

  10:         this.Edad = _edad;

  11:         this.Cuenta = _cuenta;

  12:     }

  13: }

Ahora bien, cuando queramos crear una nueva instancia de Cliente, se nos pedirá que le pasemos los parámetros solicitados por el constructor que hemos creado, si no, este marcará error:

image

Lo que el error nos dice, es que el constructor de Cliente, tiene 3 parámetros, y que está tratando de ser invocado, sin ninguno, por lo que nuestra inicialización quedaría:

   1: class ListaClientes

   2: {

   3:     public List<Cliente> RellenarLista()

   4:     {

   5:         List<Cliente> lista = new List<Cliente>();

   6:  

   7:         Cliente cliente1 = new Cliente("Héctor", 23, 1111);

   8:         lista.Add(cliente1);

   9:  

  10:         Cliente cliente2 = new Cliente("Vianey", 21, 2342);

  11:         lista.Add(cliente2);

  12:  

  13:         Cliente cliente3 = new Cliente("Anahí", 22, 8232);

  14:         lista.Add(cliente3);

  15:  

  16:         return lista;

  17:     }

  18: }

Como vemos, se ha simplificado muchísimo el código, haciéndolo mas fácil de leer, y de escribir. Cualquier duda o comentario, no duden en escribirlo🙂

Link del ejemplo: Tip2.zip

Salu2

Héctor Uriel Pérez Rojas

8 comentarios sobre “Tips para programar Orientado a Objetos con C#.- Tip #2: Crea y Usa Constructores

  1. Amigo como estas, muy chevere este post, tengo una consulta, si yo necesitaria inicializar valores a la entidas clientes, es decir que quiero que siempre se se ponga
    clientes c = new clientes();

    entonces quiero que c ya tenga valores por default, por ejemplo quiero que c.nombre siempre este en blanco, c.edad siempre este en blanco.

    esto seria correcto hacerlo en el constructor???

  2. Hola! Claro que sí es válido. Lo que tendrías que hacer es crearte el constructor sin parámetros, y posteriormente asignarle a las propiedades los valores por defecto🙂, por ejemplo:

    public class Cliente
    {
    public string Nombre { get; set; }
    public int? Edad { get; set; }

    public Cliente()
    {
    Nombre = null;
    Edad = null;
    }
    }

    Salu2🙂

    En la parte 3 hablaré mas acerca de los constructores, estén pendientes😉

  3. Hola muy buen aporte, espero puedas ayudarme con la siguiente duda:

    Cuando realizamos una consulta para llenar un datagrid ¿Cual es la operación correcta para llenarlo?

    1. Pasar la qry directamente al datagrid mediante un Data Table
    2. Pasar la qry a una lista de objetos y los objetos serán los que llenen el grid

    Saludos y gracias!

    1. Jeje, bueno pues según mi punto de vista, la mejor manera sería tener una clase del tipo TuTabla, el cual tenga operaciones de solicitud de información a una capa inferior, y ligar un objeto de esa clase al datagrid😛, espero no haberte hecho bolas, de todos modos, si no te quedo claro, hazmelo saber =), Salu2!

  4. estoy depurando una apliacacion con objetos y tengo en un contructor esto
    ~Organization() que significa ~ despues del nombre del contructor

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s