Procedimiento para declarar y usar propiedades de lectura y escritura (Guía de programación de C#)
Las propiedades proporcionan la comodidad de los miembros de datos públicos sin los riesgos que provienen del acceso sin comprobar, sin controlar y sin proteger a los datos de un objeto. Las propiedades declaran los descriptores de acceso: métodos especiales que asignan y recuperan valores del miembro de datos subyacente. El descriptor de acceso set permite que los miembros de datos se asignen, y el descriptor de acceso get recupera los valores de los miembros de datos.
En este ejemplo se muestra una clase Person
que tiene dos propiedades: Name
(string) y Age
(int). Ambas propiedades proporcionan descriptores de acceso get
y set
, de manera 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;
}
}
public class Wrapper
{
private string _name = "N/A";
public string Name
{
get
{
return _name;
}
private set
{
_name = value;
}
}
}
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 sólida
En el ejemplo anterior, las propiedades Name
y Age
son públicas e incluyen un descriptor de acceso get
y set
. Los descriptores de acceso públicos permiten que cualquier objeto lea y escriba estas propiedades. En cambio, a veces esto es conveniente para excluir uno de los descriptores de acceso. Puede omitir el descriptor de acceso set
para que la propiedad sea de solo lectura:
public string Name
{
get
{
return _name;
}
private set
{
_name = value;
}
}
De manera alternativa, puede exponer un descriptor de acceso públicamente pero hacer que el otro sea privado o esté protegido. Para obtener más información, vea Accesibilidad del descriptor de acceso asimétrico.
Una vez que se declaren las propiedades, pueden usarse como campos de la clase. Las propiedades permiten una sintaxis natural cuando ambos obtienen y establecen el valor de una propiedad, como se muestra en las instrucciones siguientes:
person.Name = "Joe";
person.Age = 99;
En un método set
de la propiedad está disponible una variable value
especial. Esta variable contiene el valor que el usuario ha especificado, por ejemplo:
_name = value;
Tenga en cuenta la sintaxis pura para incrementar la propiedad Age
en un objeto Person
:
person.Age += 1;
Si los métodos set
y get
independientes se han usado para modelar las propiedades, el código equivalente puede tener este aspecto:
person.SetAge(person.GetAge() + 1);
El método ToString
se invalida en este ejemplo:
public override string ToString()
{
return "Name = " + Name + ", Age = " + Age;
}
Tenga en cuenta que ToString
no se usa explícitamente en el programa. Se invoca de manera predeterminada mediante las llamadas a WriteLine
.