C# | Restricciones a las Propiedades

Requisito previo: Propiedades en C#

Las propiedades son el tipo especial de miembros de clase que proporciona un mecanismo flexible para leer, escribir o calcular el valor de un campo privado. Las propiedades se pueden usar como si fueran miembros de datos públicos, pero en realidad son métodos especiales llamados accesores. Esto permite acceder fácilmente a los datos y ayuda a promover la flexibilidad y la seguridad de los métodos. La encapsulación y el ocultamiento de información también se pueden lograr usando propiedades. Utiliza métodos predefinidos que son métodos de «obtener» y «establecer» que ayudan a acceder y modificar las propiedades.

Sintaxis:

<access_modifier> <return_type> <property_name>
{
        get { // body }
        set { // body }
}

Restricciones en las propiedades: tenemos que seguir algunas reglas o restricciones al escribir propiedades que son las siguientes:

  • Una propiedad no se puede pasar a través de un parámetro ref o out a un método: las propiedades no se pueden pasar a través de out o ref, ya que las propiedades son en realidad métodos . Tanto ref como out no se consideran parte de la firma del método en el momento de la compilación. Debido a esto, dará un error de tiempo de compilación. No hay solución a esta restricción, excepto eliminar ref o eliminarlo del programa por completo.
  • No se puede sobrecargar una propiedad: una propiedad no se puede sobrecargar. Significa que uno solo puede poner un único accesor y mutador get y set en una clase respectivamente. El programa que se muestra a continuación muestra lo que sucede cuando damos más de un descriptor de acceso get en la misma clase.

    // C# program to show what happens when
    // we try to overload a property
    using System;
      
    class Myprop {
      
        int _number;
      
        public int Number
        {
            get
            {
                return this._number;
            }
            set
            {
                this._number = value;
            }
            get
            {
      
                // Causes a compile time error
                // which tells get accessor
                return this._number; 
      
            } // has already been called.
        }
    }
      
    // Driver Class
    class GFG {
      
        // Main Method
        static void Main()
        {
            Myprop ex = new Myprop();
      
             // set { }
            ex.Number = 5;
            console.WriteLine("If there are only two properties"+
                          " in class ex we will get the output");
      
            // get { }
            Console.WriteLine(ex.Number); 
        }
    }

    Error de tiempo de compilación:

    prog.cs(19,3): error CS1007: Propiedad de acceso ya definida

    Pero al usar propiedades en diferentes clases en el mismo programa, uno puede usar get y set varias veces. Un ejemplo que ilustra esto se da a continuación.

    // C# program to demonstrate the use
    // of properties in different classes
    using System;
      
    class Myprop {
      
        int _number;
      
        public int Number
        {
            get
            {
                return this._number;
            }
            set
            {
                this._number = value;
            }
        }
    }
      
      
    class Myprops {
      
        int _number;
        public int Number
        {
            get
            {
                return this._number;
            }
            set
            {
                this._number = value;
            }
        }
    }
      
    // Driver Class
    class GFG {
      
        // Main Method
        static void Main()
        {
            Myprop ex = new Myprop();
            Myprops exs = new Myprops();
      
            // Calls set mutator from the Myprops class
            exs.Number = 7; 
      
            // Calls set mutator from the Myprop class
            ex.Number = 5; 
      
            // Gets the get accessor form the Myprop class
            Console.WriteLine("The value set in the class "+
                                 "Myprop is: " + ex.Number); 
      
            // Gets the get accessor form the Myprops class
            Console.WriteLine("The value set in the class"+
                             " Myprops is: " + exs.Number); 
        }
    }

    Producción:

    The value set in the class Myprop is: 5
    The value set in the class Myprops is: 7
    
  • Una propiedad no debe alterar el estado de la variable subyacente cuando se llama al descriptor de acceso get: el descriptor de acceso get de propiedades está predeterminado en modo de solo lectura, mientras que el comando set está configurado en modo de solo escritura . Debido a esto, si intentamos ingresar valores o modificar el alcance del accesor get, obtendremos una advertencia que indica que el código al que intentamos acceder es inalcanzable. El ejemplo dado a continuación ilustra eso.

    // C# program to demonstrate the 
    // above-mentioned restriction
    using System;
      
    class Myprop {
      
        int _number;
        public int Number
        {
            get
            {
                return this._number;
      
                // We get the warning saying that
                // the code is unreachable.
                this._number = 5; 
            }
            set
            {
                this._number = value;
            }
        }
    }
      
    // Driver Class
    class GFG {
      
        static void Main()
        {
            Myprop ex = new Myprop();
      
            // set { }
            ex.Number = 5; 
      
             // get { }
            Console.WriteLine(ex.Number);
        }
    }

    Advertencias:

    prog.cs(16,4): advertencia CS0162: código inalcanzable detectado

    Producción:

    5

    Como se ve en la salida del programa, el código se ejecuta con éxito, pero los valores que agregamos en el descriptor de acceso get no se pueden usar porque no se puede acceder a ellos. Es por eso que no tiene sentido cambiar la variable subyacente cuando se llama al descriptor de acceso get.

Publicación traducida automáticamente

Artículo escrito por NishanthVaidya y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *