viernes, 21 de febrero de 2014

Receta No. 1-20 en C#: Definición de una Propiedad Auto-Implementada

Tabla de Contenido

0. Introducción
1. Problema
2. Solución
3. Discusión de la Solución
4. Práctica
5. Conclusiones
6. Glosario
7. Enlaces & Literatura

0. Introducción

Vamos a progresar en el aprendizaje del lenguaje programación C# a través de esta serie de recetas. Esta es la vigésima receta; y vamos a aprovecharla para aprender cómo definir una propiedad automáticamente implementada. Esto nos ahorrará tiempo creando campos de instancia superfluos en la definición de un tipo de dato. Pasemos al problema concreto.

1. Problema

En la solución software que contiene decenas de clases del mundo del problema, muchos de ellas poseen campos que no requieren ningún tipo de lógica de procesamiento, validación, o manipulación. Es por eso, que se ha planteado volver redefinir la implementación del modelo de clases para hacer la omisión de campos asociados a propiedades que no requieran lógica en los métodos de acceso.

2. Solución

A partir de la versión 3.0 [3] de C#, los programadores cuentan con propiedades auto-implementadas para aquellas propiedades que no requieren lógica adicional en los métodos de acceso y mutadores. Esta será la solución que va a permitir que en tiempo de ejecución la CLR manipule una variable implícita asociada a la propiedad.

3. Discusión de la Solución

Las propiedades auto-implementadas nos van a permitir hacer más simple la codificación de los campos o atributos de una clase. Esta característica es meramente útil para aquellos campos que no requieren lógica para el procesamiento, validación, o manipulación. El compilador se encargará de asociar un campo de instancia (backing field) de manera implícita. Mecanismo de creación de una propiedad auto-implementada:

public string PropiedadAutoImplementada
{
get;
set;
}

Las métodos de acceso (accesors, en inglés) get [5] y set [6] deben ser especificados de lo contrario el compilador arrojará el error:

error CS0548: `Test.PropiedadAutoImplmentada': property or indexer must have at least one access

El uso de una propiedad desde código cliente sigue esta convensión:

Mutador:

instanciaClase.PropiedadAutoImplementada = "Valor";

Acceso:

Console.WriteLine ("Valor: {0}", instanciaClase.PropiedadAutoImplementada);

Una de las tantas ventajas de las propiedades es el uso de inicializadores; veamos cómo funciona esto con un ejemplo práctico:

Clase Gato.cs:

Esta clase -Gato- posee dos propiedades, a saber: Edad, y Nombre auto-implementadas. En la línea 23 se crea una instancia de este tipo, y se utiliza la lista comatosa para la inicialización de las propiedades correspondientes:

Gato gato = new Gato { Edad = 10, Nombre = "Ferdinand" };

[Nota: Para ampliar más el contexto y práctica acerca de propiedades, los invito a la lectura del artículo Propiedades en C#.]

4. Práctica

En este ejemplo vamos a crear una clase llamada Cliente, y especificaremos tres propiedades auto-implementadas: ID, Nombre, y TotalCompras.

Archivo Cliente.cs:

Obsérvese que ninguna de las propiedades tiene lógica de procesamiento: sólo se ha especificado los métodos de acceso get y set. En el método Main de la clase PruebaCliente se crea una instancia de Cliente y se asignan valores a las propiedades desde el constructor, se muestra el estado actual (valores de las propiedades) del objeto, se modifica la propiedad TotalCompras, y se muestra la modificación.

Compilacion del archivo Cliente.cs:

  1. csc /target:exe /out:Cliente.exe Cliente.cs

Ejecución de Cliente.exe:

  1. Cliente.exe

► Prueba de ejecución.

Conclusiones

Aprendimos que las propiedades auto-implementadas nos sirven para especificar, de forma implícita, campos que no requieren lógica de procesamiento en los métodos de acceso get y set. Por medio de los ejemplos, ya conocemos cómo declararlas y utilizarlas desde código cliente o desde un constructor.

Glosario

- Auto-implementada
- Campo de instancia
- CLR
- get
- Miembro
- Propiedad
- set

Enlaces & Literatura

[1]: Visual C# 2010 Recipes by Allen Jones and Adam Freeman. Copyright 2010 Allen Jones and Adam Freeman, 978-1-4302-2525-6.
[2]: Properties (C# Programming Guide) - http://msdn.microsoft.com/en-us/library/x9fsa0sw.aspx
[3]: Auto-Implemented Properties (C# Programming Guide) - http://msdn.microsoft.com/en-us/library/bb384054.aspx
[4]: c#-implemented properties over manual implemented properties? - Stack Overflow - http://stackoverflow.com/questions/8116951/any-reason-to-use-auto-implemented-properties-over-manual-implemented-properties
[5]: get (C# Reference) - http://msdn.microsoft.com/en-us/library/ms228503.aspx
[6]: set (C# Reference) - http://msdn.microsoft.com/en-us/library/ms228368.aspx


M

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.