11.08.2008

Propiedades Automáticas en C# 3

Una de las nuevas características en C# 3 son las propiedades automáticas. Esta característica consiste simplemente en tener la posibilidad de declarar las propiedades requeridas, con el get y el set vacíos. El compilador se encarga de generar en código intermedio (MSIL) los atributos requeridos para cada una de las propiedades automáticas. Para entender mejor esta característica, veamos un ejemplo.

Supongamos que deseamos tener una clase Producto con una serie de atributos como el Id, el nombre, el precio y el país de origen. Anteriormente, para llevar a cabo esta tarea, debiamos definir los atributos y seguidamente crear las propiedades de estos atributos. Con esta nueva característica, simplemente tenemos que crear las propiedades vacías tal y como se ve en la siguiente definición de la clase.

public class Producto
{
public int Id { get; set; }
public string Nombre { get; set; }
public double Precio { get; set; }
public string PaisDeOrigen { get; set; }

public override string ToString( )
{
return string.Format("Id: {0}, Producto: {1}, Precio: {2}, Pais: {3}", Id, Nombre, Precio.ToString( ), PaisDeOrigen);
}
}



Para utilizar la clase anterior, simplemente se crea una instancia de la clase producto, y se acceden sus propiedades de la manera que normalmente lo haríamos si los atributos de la clase hubieran sido definidos manualmente.



static void Main( string[] args )
{

Producto miProducto = new Producto ();
miProducto.Id = 0;
miProducto.Nombre = "Audífonos JVC Super bass";
miProducto.PaisDeOrigen = "Holanda";
miProducto.Precio = 49.99;
Console.WriteLine(miProducto);
}



El resultado al ejecutar este código se ve en la siguiente figura:



image



En este caso, para imprimir la información del producto, cuando se llama al método estático WriteLine de la clase Console, se esta llamando al método que acabamos de sobre escribir ToString de la clases Producto. Este es un comportamiento que se da por defecto cuando se manda a escribir algún objeto.



Ahora, ¿qué obtenemos al utilizar las propiedades dinámicas? Básicamente nos liberamos de la necesidad de declarar variables privadas y su accesor get y set, osea la propiedad. Aunque podemos usar alguna herramienta de refactoring para encapsular los campos, si no se requieren reglas de validación de negocio dentro de las propiedades, el código es más legible utilizando propiedades automáticas.

2 comentarios:

Erick Vargas Chavarría dijo...

Muy interesantes las características de C# 3 pero preocupa un poco que estas vayan a prestarse para que viejas malas prácticas de programación se incorporen a este lenguaje, como por ejemplo el uso de las variables sin tipo como se usaban en vs6 (por holgazanería) o que se pierda el sentido del uso de propiedades vrs uso de variables publicas solo para evitar 2 lineas de código.

Sin embargo si se agregan capacidades como las funciones lambda que, aunque no son conceptos completamente nuevos, vienen a enriquecer el lenguaje.

Anónimo dijo...

aja...estaria bueno un ejemplo, digo, asi se de que se trata...