Está en la página 1de 12

Fundamentos de C# y

POO

Ing. Francisco Miguel Ruiz Hidalgo MSc.


Campos y propiedades
• Los campos representan los atributos de la clase es a través de los campos
que definimos la información que un cliente puede almacenar en un
objeto. Un campo es una variable declarada al nivel de la clase.
• Por ejemplo: tenemos la clase persona (public class persona) y en ella
podemos agregar un campo de la siguiente manera public string nombre;
para indicar el nombre de la persona. Entonces cuando instanciamos la
clase persona, podemos utilizar el campo nombre a través de la variable
persona1 para guardar el nombre de la persona. Lamentablemente esto en
general es considerado mala practica.
• La razón de esto es que quedamos a merced de lo que el cliente de la clase
haga con el campo nombre.
Campos y propiedades
• Que tal si quisiéramos guardar en un log todas las veces que el campo
nombre sea editado o que tal que el campo nombre fuese de solo
lectura. Esto significa que los clientes de la clase no puedan alterarlo
solo leerlo.
• Que tal si queremos ejecutar una función cada vez que el campo
nombre es leído o editado. Nada esto es posible con nuestra clase
persona en el estado en que se encuentra en C# la manera de
resolver esto utilizando propiedades.
• Las propiedades son métodos especiales dedicados a la lectura y
escritura de información de nuestra clase.
Campos y propiedades
• Por ejemplo: podemos utilizar una propiedad nombre para centralizar
las operaciones de lectura y escritura de nuestro campo nombre que
tenemos.
• Además vamos a marcar nuestro campo nombre como privado como
indican las buenas practicas de desarrollo en C#.
• Vamos a crear nuestra propiedad, vamos a decir public string nombre
vamos a crear nuestra propiedad vamos a escribir public string
Nombre vamos a utilizar un get que nos retorne nombre, lo que
haremos será retornar el valor del campo nombre y set vamos a decir
igual a value
Campos y propiedades
• Ahora vamos hacer private string nombre de modo que no podamos
utilizar este campo desde fuera de la clase sino que estamos
obligados a utilizar la propiedad, para nuestro caso cambiar la n
minúscula de nombre por la N mayúscula, de esta forma se corrige el
error que teníamos.
• Entonces para diferenciar un campo de una propiedad notamos el uso
del get y set.
• El get se va a ejecutar cuando leamos el valor de la variable nombre
• Y set es la funcionalidad que se va ejecutar cuando editemos el valor
de nuestra propiedad nombre
Campos y propiedades
• Entonces añadir Console.writeLine(persona1.Nombre);
• Colocar breakpint en get y set de nuestra propiedad Nombre
• Ahora presionar F5
• Vemos que el primer bloque de código que se ejecuta es el bloque
set, porque lo primero que hacemos aquí es escribir sobre nuestra
propiedad nombre, volvemos a presionar F5 vemos que ahora se
ejecuta el get porque estamos leyendo el valor de nuestra propiedad
nombre.
• Detener el ejecutar
Campos y propiedades
• Vemos ahora que tenemos mas opciones con respecto a la funcionalidad que
podemos ejecutar cuando leemos o escribimos sobre la variable nombre.
• Por ejemplo: en set escribir Console.WriteLine($”Actualizando el nombre a
{value}”); lo que hará es que cada vez que se ejecute la funcionalidad de editar el
nombre se debe ejecutar este bloque de código e incluirá el Console.WriteLine
que acabamos de escribir.
• Una de las ventajas de utilizar propiedades es que podemos centralizar la lectura
y escritura de campos lo que nos permite interceptar esa funcionalidad y agregar
una funcionalidad personalizada. Esto no lo podíamos lograr cuando teníamos el
campo como publico y lo estábamos utilizando directamente.
• Presionar Ctrl+F5, resultado: tendremos Actualizando el nombre a Francisco y
Actualizando el nombre a Paola
• El Console se ejecuta 2 veces para cada nombre Francisco y Paola
Campos y propiedades
• Por lo tanto debemos evitar utilizar campos públicos, esto es considerado
mala practica y realmente no te trae ningún tipo de ventaja
• Lo correcto es siempre utilizar propiedades.
• Ahora C# nos permite expresar la sintaxis anterior de manera mas breve,
tanto solo diciendo public string Nombre { get; set; }, de este modo
tenemos la misma funcionalidad.
• Ahora podemos borrar el campo private string nombre; basta tan solo con
la propiedad public string Nombre { get; set; }
• A este tipo de propiedades donde no se le ve ningún campo se le llaman
propiedades auto implementadas porque por detrás si se encarga
automáticamente de generar un campo a través del cual se va a guardar la
data del objeto.
Campos y propiedades
• Si vemos para el cliente nada a cambiado.
• El cliente de la clase sigue utilizando la clase instanciando los objetos y
editando el nombre de la persona dos veces y leyendo ese nombre y el
código sigue funcionando
• Entonces para el cliente de la clase no ha cambiado nada por haber
eliminado el campo nombre es un concepto de diseño de software llamado
encapsulamiento
• Cuando diseñamos nuestro software siguiendo buenos principios de
desarrollo como el encapsulamiento hacemos que nuestro software sea
mas fácil de desarrollar y actualizar.
• Vimos como actualizar nuestra clase persona eliminando un campo y esto
no hizo que el código dejara de compilar.
Campos y propiedades
• Si quisiéramos que un propiedad fuese de solo lectura podríamos omitir el
set, entonces quedaría public string Nombre { get; }.
• De esta manera el cliente de la clase no puede editar la propiedad nombre
solo leerla, sinos fijamos tendremos 2 errores en las líneas que son las que
intentan editar la propiedad nombre, pero en la línea donde se intenta leer
la propiedad Nombre no ocurre ningún error.
• Esto es útil para datos calculados a partir de cierta información
• Por ejemplo: si tenemos una propiedad donde tenemos que colocar un
salario mensual de una persona
• Seria public decimal SalarioMensual { get; set;}
• Tambien queremos obtener su salario anual, seria public decimal
SalarioAnual { get; set;}
Campos y propiedades
• Entonces en el cuerpo del set podemos colocar
• {
• get
• {
• return SalarioMensual * 12;
• }
• }
• Ahora tenemos un campo salario anual que es de solo lectura y tiene
sentido que lo sea porque a través del salario mensual podemos calcular el
salario anual
Campos y propiedades
• Entonces colocaremos un salario mensual a la persona
• persona1.SalarioMensual = 1000;
• Y en pantalla vamos a colocar su salario mensual y también su salario
anual
• Console.WriteLine($”Nombre: {persona1.Nombre}”);
• Console.WriteLine($”Salario mensual: {persona1.SalarioMensual}”);
• Console.WriteLine($”Salario anual: {persona1.SalarioAnual}”);
• Presionar Ctrl + F5 para ejecutar

También podría gustarte