A partir de C# 3.0 nos encontramos con una nueva forma de implementar las propiedades de nuestras clases con las propiedades autoimplementadas.
Las propiedades autoimplementadas nos permiten escribir la declaración de la propiedad de forma más concisa y sencilla cuando no es necesaria ninguna lógica adicional en los descriptores de acceso a la propiedad, o en otras palabras, cuando no se requiere personalizar los bloques Set y/o Get.
Para verlo de forma más clara, mostraremos a continuación un ejemplo de la declaración de propiedades clásica, y la declaración de propiedades autoimplementadas:
Sin Propiedades Autoimplementadas
/// <summary> /// Car class /// </summary> public class Car { #region "Attributes" /// <summary>Brand car</summary> private string brand; /// <summary>Model car</summary> private string model; /// <summary>Vehicle registration plate</summary> private string plate; #endregion #region "Properties" /// <summary>Gets & sets the brand of car</summary> public string Brand { get { return brand; } set { brand = value; } } /// <summary>Gets & sets the brand of car</summary> public string Model { get { return model; } set { model = value; } } /// <summary>Vehicle registration plate</summary> /// <remarks>read-only property</remarks> public string Plate { get { return plate; } } #endregion /// <summary>Constructor</summary> /// <param name="plate"></param> public Car(string plate) { this.plate = plate; } }
En el código anterior, hemos creado una simple clase de ejemplo Car con 3 atributos privados, y sus correspondientes 3 propiedades públicas, siendo la tercera de ellas (plate) propiedad de sólo lectura.
Comprobemos a continuación cómo declarar el código con propiedades autoimplementadas sobre la misma clase de ejemplo.
Con Propiedades Autoimplementadas
/// <summary> /// Car class /// </summary> public class Car { #region "Attributes" /// <summary>Brand car</summary> private string brand; /// <summary>Model car</summary> private string model; /// <summary>Vehicle registration plate</summary> private string plate; #endregion #region "Properties" /// <summary>Gets & sets the brand of car</summary> public string Brand { get; set; } /// <summary>Gets & sets the brand of car</summary> public string Model { get; set; } /// <summary>Vehicle registration plate</summary> /// <remarks>read-only property</remarks> public string Plate { get; private set; } #endregion /// <summary>Constructor</summary> /// <param name="plate"></param> public Car(string plate) { this.plate = plate; } }