Cómo: Declarar y utilizar propiedades de lectura y escritura (Guía de programación de C#)
Actualización: noviembre 2007
Las propiedades proporcionan la comodidad de utilizar miembros de datos públicos sin los riesgos que implica el acceso no protegido y sin control ni comprobación a los datos de un objeto. Esto se logra a través de los descriptores de acceso: métodos especiales que asignan y recuperan los valores del miembro de datos subyacente. El descriptor de acceso set permite asignar los miembros de datos y el descriptor de acceso get recupera los valores de los miembros de datos.
Este ejemplo muestra una clase Person con dos propiedades: Name (cadena) y Age (entero). Ambas propiedades proporcionan descriptores de acceso get y set, por lo que se consideran propiedades de lectura y escritura.
Ejemplo
class Person
{
private string name = "N/A";
private int age = 0;
// Declare a Name property of type string:
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
// Declare an Age property of type int:
public int Age
{
get
{
return age;
}
set
{
age = value;
}
}
public override string ToString()
{
return "Name = " + Name + ", Age = " + Age;
}
}
class TestPerson
{
static void Main()
{
// Create a new Person object:
Person person = new Person();
// Print out the name and the age associated with the person:
Console.WriteLine("Person details - {0}", person);
// Set some values on the person object:
person.Name = "Joe";
person.Age = 99;
Console.WriteLine("Person details - {0}", person);
// Increment the Age property:
person.Age += 1;
Console.WriteLine("Person details - {0}", person);
// Keep the console window open in debug mode.
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
/* Output:
Person details - Name = N/A, Age = 0
Person details - Name = Joe, Age = 99
Person details - Name = Joe, Age = 100
*/
Programación eficaz
En el ejemplo anterior, las propiedades Name y Age son public e incluyen un descriptor de acceso get y set. Esto permite que cualquier objeto lea y escriba estas propiedades. Sin embargo, a veces es conveniente excluir uno de los descriptores de acceso. Por ejemplo, al omitir el descriptor de acceso set, la propiedad pasa a ser de sólo lectura:
public string Name
{
get
{
return name;
}
}
Opcionalmente, se puede exponer públicamente un descriptor de acceso pero definir el otro como private o protected. Para obtener más información, vea Accesibilidad del descriptor de acceso asimétrico (Guía de programación de C#).
Una vez declaradas las propiedades, se pueden utilizar como si fueran campos de la clase. Esto permite una sintaxis muy natural, tanto para obtener como para establecer el valor de una propiedad, como se muestra en las siguientes instrucciones:
person.Name = "Joe";
person.Age = 99;
Observe que, en un método set de una propiedad, se dispone de una variable especial value. Esta variable contiene el valor especificado por el usuario, por ejemplo:
name = value;
Observe la sintaxis tan simple que se utiliza para incrementar la propiedad Age de un objeto Person:
person.Age += 1;
Si se utilizaron métodos set y get independientes para modelar las propiedades, el código equivalente tendría el siguiente aspecto:
person.SetAge(person.GetAge() + 1);
En el siguiente ejemplo, el método ToString se reemplaza:
public override string ToString()
{
return "Name = " + Name + ", Age = " + Age;
}
Observe que ToString no se utiliza explícitamente en el programa. Se invoca de forma predeterminada mediante las llamadas WriteLine.