CREAR PROPIEDADES EN CSHARP | C# .NET

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.


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.

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:

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

Una de las novedades de Visual C# .NET con respecto a las versiones anteriores de este lenguaje es que en las propiedades normales (de lectura y escritura), podemos definir diferentes niveles de accesibilidad a cada uno de los dos bloques que forman una propiedad

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.


EJEMPLOS DEL VÍDEO


Ejemplo 1

Ejemplo 2

Ejemplo 3

No hay comentarios:

Publicar un comentario

DELEGADOS EN C# .NET | PUNTEROS A METODOS

Delegados Tal como hemos comentado, los eventos y los delegados están muy unidos en C#. De hecho no se pueden definir eventos si no def...