Implementar una propiedad de solo lectura en C#
-
Declarar la propiedad de solo lectura en una variable al inicializar en
C#
-
Implementar una propiedad de solo lectura usando una propiedad
get
simple enC#
Hoy aprenderemos cómo crear una propiedad de solo lectura en C#, para que solo se pueda leer y no modificar.
Declarar la propiedad de solo lectura en una variable al inicializar en C#
Hemos trabajado en la clase CAR
para los dos últimos artículos. Usemos la misma clase e intentemos implementar una propiedad de solo lectura. Digamos que nuestra clase CAR
tiene una propiedad conocida como maker_id
que queremos mantener de solo lectura por motivos de seguridad.
using System;
class CAR {
private readonly int maker_id;
public CAR(int maker_id) {
this.maker_id = maker_id;
}
public int get_maker_id() {
return maker_id;
}
}
public class Program {
static void Main(String[] args) {
CAR x = new CAR(5);
Console.WriteLine(x.get_maker_id());
}
}
Así que hemos declarado el maker_id
como readonly
. Si ejecuta lo anterior, la salida será:
5
Así que digamos que ahora deseamos agregar otro setter para nuestro campo maker_id
. Entonces podemos hacer algo de la siguiente manera:
public void set_maker_id(int maker_id) {
this.maker_id = maker_id;
}
Pero, ahora notará que arroja un error:
Entonces puedes ver que la propiedad readonly
solo nos permite asignar el valor una vez a una variable en el constructor. De lo contrario, tiende a arrojar errores y niega la modificación debido a la accesibilidad.
El código completo se muestra a continuación:
using System;
class CAR {
private readonly int maker_id;
public CAR(int maker_id) {
this.maker_id = maker_id;
}
public void set_maker_id(int maker_id) {
this.maker_id = maker_id; // line ERROR
}
public int get_maker_id() {
return maker_id;
}
}
public class Program {
static void Main(String[] args) {
CAR x = new CAR(5);
Console.WriteLine(x.get_maker_id());
}
}
El error ha sido mencionado en los comentarios en el código.
Implementar una propiedad de solo lectura usando una propiedad get
simple en C#
Podemos escribir la propiedad maker_id
de la siguiente manera:
private int maker_id { get; }
Y si intenta escribir una función de la siguiente manera:
public void set_val(int val) {
this.maker_id = val;
}
Se producirá un error de la siguiente manera:
Entonces puede ver cómo configurar la propiedad get
hace que sea de solo lectura. El código completo es el siguiente:
using System;
class CAR {
private int maker_id {
get;
set;
}
public CAR(int maker_id) {
this.maker_id = maker_id;
}
}
class Program {
static void Main(String[] args) {
CAR x = new CAR(5);
}
}
Esto no solo sigue las reglas de la convención, sino que también tiende a romper los serializadores. Además, no cambia y tiende a ser inmutable.
En caso de que quiera asegurarse de que get
devuelva algo, haga el código de la siguiente manera:
class CAR {
public int maker_id {
get { return maker_id; }
}
}
Así es como se implementa un read-only en C#.
Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!
GitHub