C# Propiedades (Obtener y Establecer)
Propiedades y encapsulación
Antes de comenzar a explicar las propiedades, debes tener un conocimiento básico de "Encapsulación".
El significado de Encapsulación es garantizar que los datos "sensibles" estén ocultos para los usuarios. Para lograr esto, debes:
- declarar campos/variables como
private
- proporcionar los métodos
public
get
yset
, a través de properties, para acceder y actualizar el valor de un campoprivate
Propiedades
Aprendiste del capítulo anterior que solo se puede acceder a las variables private
dentro de la misma clase (una clase externa no tiene acceso a ellas). Sin embargo, a veces necesitamos acceder a ellos, y eso se puede hacer con propiedades.
Una propiedad es como una combinación de una variable y un método, y tiene dos métodos: un get
y un método set
:
Ejemplo
class Person
{
private string name; // campo
public string Name // propiedad
{
get { return name; } // get method
set { name = value; } // set method
}
}
Ejemplo explicado
La propiedad Name
está asociada con el campo name
. Es una buena práctica utilizar el mismo nombre tanto para la propiedad como para el campo privado, pero con la primera letra en mayúscula.
El método get
devuelve el valor de la variable name
.
El método set
asigna un value
al name
variable. La palabra clave value
representa el valor que asignamos a la propiedad.
Si no lo entiendes completamente, mira el siguiente ejemplo.
Ahora podemos usar la propiedad Name
para acceder y actualizar el campo private
del Person
clase:
Ejemplo
class Person
{
private string name; // campo
public string Name // propiedad
{
get { return name; }
set { name = value; }
}
}
class Program
{
static void Main(string[] args)
{
Person myObj = new Person();
myObj.Name = "Liam";
Console.WriteLine(myObj.Name);
}
}
La salida será:
Liam
Propiedades automáticas (taquigrafía)
C# también proporciona una forma de utilizar propiedades abreviadas/automáticas, donde no es necesario definir el campo para la propiedad y solo hay que escribir get;
y set;
dentro de la propiedad.
El siguiente ejemplo producirá el mismo resultado que el ejemplo anterior. La única diferencia es que hay menos código:
Ejemplo
Usando propiedades automáticas:
class Person
{
public string Name // propiedad
{ get; set; }
}
class Program
{
static void Main(string[] args)
{
Person myObj = new Person();
myObj.Name = "Liam";
Console.WriteLine(myObj.Name);
}
}
La salida será:
Liam
¿Por qué encapsular?
- Mejor control de los miembros de la clase (reduce la posibilidad de que usted (u otros) estropeen el código)
- Los campos se pueden hacer solo lectura (si solo usa el método
get
), o solo escritura (si solo usa el métodoset
) - Flexible: el programador puede cambiar una parte del código sin afectar otras partes
- Mayor seguridad de los datos