lunes, 2 de marzo de 2009

Propiedades automáticas en C#

Los cambios que aporta .NET en los lenguajes vienen promovidos para mejorar la experiencia de desarrollo de manera sutil y dramática y con esto mejora la productividad y reduce la cantidad de código que tenemos que escribir.

Nueva característica de C#: Propiedades automáticas.

Si somos desarrolladores en C#, normalmente escrbimos las clases con propiedades básicas como en el código siguiente:

public class Persona

    {

        private string nombre;

        private string apellido;

        private int edad;


        public string nombre

        {

            get { return _nombre; }

            set { _nombre = value; }

        }


        public string apellido

        {

            get { return _apellido; }

            set { _apellido = value; }

        }


        public int edad

        {

            get { return _edad; }

            set { _edad = value; }

        }

    }


No estamos añadiendo ninguna lógica en las propiedades Get/Set, todo lo contrario, lo que estamos haciendo es asignar los valores a una variable. 

El compilador de C# nos proporciona una forma elegante para hacer que el código que escribamos sea más conciso mientras mantiene la flexibilidad de las propiedades usando una nueva característica conocida como “propiedades automáticas”. Las propiedades automáticas nos permiten evitar la declaración manual de variables privadas y escribir el código de los métodos get/set – En lugar de eso, el compilador puede crear automáticamente las variables privadas necesarias y el código por defecto de los métodos get/set por nosotros.

Por ejemplo, usando las propiedades automáticas podemos reescribir el código anterior de la siguiente manera:

    public class Persona

    {

        public string nombre {get; set;}

        public string apellido {get; set;}

        public int edad { get; set; }

    }

Cuando el compilador de C# se encuentre con los Get/Set’s vacíos, como en el código anterior, generará automáticamente una variable privada en la clase, e implementará las propiedades públicas get y set para ella. El beneficio de esto es que desde un punto de vista de tipo-contrato, la clase será exactamente igual que la primera implementación de la que hablábamos más arriba. Esto significa que –al contrario que las variables públicas – más adelante podemos añadir validación lógica en el método set sin tener que cambiar ningún componente externo que referencie a mi clase.

Saludos.