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