Propiedades
Las
propiedades son los miembros de los tipos que nos permiten acceder a los datos
que dicho tipo manipula. Normalmente una propiedad está relacionada con un
campo, de forma que el campo sea el que realmente contenga el valor y la
propiedad simplemente sea una especie de método a través del cual podemos
acceder a ese valor.
Debido a que el uso de las propiedades realmente nos permite acceder a los valores de una clase (o tipo), se suelen confundir los campos con las propiedades, pero realmente un campo (o variable) público no es una propiedad, al menos en el sentido de que el propio .NET Framework no lo interpreta como tal, aunque en la práctica nos puede parecer que es así, ya que se utilizan de la misma forma. Pero no debemos dejarnos llevar por la comodidad y si no queremos perder funcionalidad, debemos diferenciar en nuestro código las propiedades de los campos.
Lo
primero que debemos tener presente es que gracias a esta diferenciación que
hace .NET Framework, podemos poner en práctica
una de las características de la programación orientada a objetos: la
encapsulación, de forma, que la manipulación de los datos que una clase
contiene siempre se deben hacer de forma "interna" o privada a la
clase, dejando a las propiedades la posibilidad de que externamente se
manipulen de forma controlada, esos datos. De esta forma tendremos mayor
control sobre cómo se acceden o se asignan los valores a esos datos, ya que, al
definir una propiedad, tal como hemos comentado, realmente estamos definiendo
un procedimiento con el cual podemos controlar cómo se acceden a esos datos.
Definir una propiedad en C# .NET
Debido
a que una propiedad realmente nos permite acceder a un dato que la clase (o
estructura) manipula, siempre tendremos un campo relacionado con una propiedad.
El campo será el que contenga el valor y la propiedad será la que nos permita
manipular ese valor.
En
C#, las propiedades las declaramos como cualquier otra función, con la
diferencia de que no podemos usar paréntesis después del nombre y que en el
cuerpo de la propiedad, que estará limitado por las típicas llaves, tendremos
que indicar dos bloques de código, los cuales servirán para diferenciar el
código que el compilador utilizará para recuperar el valor de la propiedad o el
usado para hacer la asignación.
Esos dos bloques estarán indicados por la instrucción get, para recuperar el valor, y la instrucción set, para asignar el valor.
El bloque set tendrá un parámetro implícito que representa al valor indicado a la derecha del signo igual de la asignación y se llama value.
Esos dos bloques estarán indicados por la instrucción get, para recuperar el valor, y la instrucción set, para asignar el valor.
El bloque set tendrá un parámetro implícito que representa al valor indicado a la derecha del signo igual de la asignación y se llama value.
La
mejor forma de aclarar cómo se define una propiedad es viendo un ejemplo.
public class Celulares
{
private string marca;
public string Marca
{
get
{
return marca;
}
set
{
marca = value;
}
}
}
Como
podemos comprobar tenemos dos bloques de código, el bloque get que
es el que se usa cuando queremos acceder al valor de la propiedad, por tanto
devolvemos el valor del campo privado usado para almacenar ese dato. El
bloque set es el usado cuando asignamos un valor a la
propiedad, este bloque tiene predefinido un parámetro (value) que
representa al valor que queremos asignar a la propiedad.
Nota:
En este ejemplo, estamos usando marca (con eme minúscula) para el campo privado, y Marca con la eme en mayúsculas para el nombre de la propiedad, esta es la recomendación que se hace para los desarrolladores de .NET, y en C# se puede seguir "al pie de la letra" porque, como sabemos, C# considera diferentes a las variables que solo se diferencian por las mayúsculas y minúsculas.
En este ejemplo, estamos usando marca (con eme minúscula) para el campo privado, y Marca con la eme en mayúsculas para el nombre de la propiedad, esta es la recomendación que se hace para los desarrolladores de .NET, y en C# se puede seguir "al pie de la letra" porque, como sabemos, C# considera diferentes a las variables que solo se diferencian por las mayúsculas y minúsculas.
Propiedades de sólo lectura
En
ciertas ocasiones nos puede resultar interesante que una propiedad sea de sólo
lectura, de forma que el valor que representa no pueda ser cambiado.
Para
definir una propiedad de solo lectura en C# basta con definir solo el
bloque get de la propiedad.
En el siguiente código definimos una propiedad de solo lectura llamada FechaDeHoy:
En el siguiente código definimos una propiedad de solo lectura llamada FechaDeHoy:
public DateTime FechaDeHoy
{
get
{
return DateTime.Now;
}
}
Propiedades de sólo escritura
De
igual forma, si queremos definir una propiedad que sea de sólo escritura, solo
definiremos el bloque set, tal como podemos ver en este código:
public string Clave
{
set
{
if( value == "1234ABCD" )
{
// Entrar al Sistema
}
}
}
Diferente accesibilidad para los bloques get y set
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgH9UfOCMj8lKb2mjigTGc-s43vmwHlQm4kJIUeWifshGRiYaEyAw8ee8AVZf3DnMJPNj2YfXzXl8tWgLtC-DvsewlgNcgO7Hwq3UT1DGBLcN169giKPpyDBnK7q_6MIIsULAtDuO4o7Ofc/s320/PROPIEDADES+EN+CSHARP+NET.png)
Por ejemplo, podríamos definir el bloque get como público, (siempre accesible), y el bloque set como private, de forma que solo se puedan realizar asignaciones desde dentro de la propia clase.
Por
ejemplo, los MensajesNoLeidos de un Celular podríamos declararlo para que desde
cualquier punto se pueda saber dicha cantidad, pero la asignación de dicho importe
solo estará accesible para los procedimientos definidos en la propia clase:
public class Celulares
{
private int mensajesNoLeidos;
public decimal MensajesNoLeidos
{
get
{
return mensajesNoLeidos;
}
private set
{
mensajesNoLeidos = value;
}
}
}
Para
hacer que el bloque set sea privado, lo indicamos con el
modificador de accesibilidad private, al no indicar ningún
modificador en el bloque get, éste será el mismo que el de la
propiedad.
Nota:
El nivel de accesibilidad de los bloques get o set debe ser igual o inferior que el de la propiedad, por tanto si la propiedad la declaramos como private, no podemos definir como público ninguno de los bloques get o set.
El nivel de accesibilidad de los bloques get o set debe ser igual o inferior que el de la propiedad, por tanto si la propiedad la declaramos como private, no podemos definir como público ninguno de los bloques get o set.
EJEMPLOS DEL VÍDEO
Ejemplo 1
Ejemplo 2
Ejemplo 3
No hay comentarios:
Publicar un comentario