En una aplicación .NET, ¿cuándo debo usar las propiedades "ReadOnly" y cuándo debo usar solo "Get"? Cuál es la diferencia entre estos dos.
private readonly double Fuel= 0;
public double FuelConsumption
{
get
{
return Fuel;
}
}
o
private double Fuel= 0;
public double FuelConsumption
{
get
{
return Fuel;
}
}
public double FuelConsumption => Fuel;
Respuestas:
Crear una propiedad con solo un captador hace que su propiedad sea de solo lectura para cualquier código que esté fuera de la clase.
Sin embargo, puede cambiar el valor utilizando los métodos proporcionados por su clase:
Establecer el campo privado de su clase como le
readonly
permite establecer el valor del campo solo una vez (usando una asignación en línea o en el constructor de la clase). No podrá cambiarlo más tarde.readonly
Los campos de clase se utilizan a menudo para las variables que se inicializan durante la construcción de la clase y nunca se cambiarán más adelante.En resumen, si necesita asegurarse de que el valor de su propiedad nunca se cambiará desde el exterior, pero necesita poder cambiarlo desde el código de su clase, use una propiedad "Get-only".
Si necesita almacenar un valor que nunca cambiará una vez que se haya establecido su valor inicial, use un
readonly
campo.fuente
A partir de C # 6 , puede declarar e inicializar una 'propiedad automática de solo lectura' en una línea:
Puede establecer el valor del constructor pero no de otros métodos.
fuente
Se dice que una propiedad que solo tiene un getter es de solo lectura. Porque no se proporciona ningún setter, para cambiar el valor de la propiedad (desde fuera).
C # tiene una palabra clave de solo lectura , que se puede usar en campos (no propiedades). Un campo que está marcado como "solo lectura", solo se puede establecer una vez durante la construcción de un objeto (en el constructor).
fuente
Las propiedades de solo lectura se utilizan para crear un código a prueba de fallos. Me gusta mucho la serie de publicaciones de Encapsulación de Mark Seemann sobre propiedades y campos de respaldo:
http://blog.ploeh.dk/2011/05/24/PokayokeDesignFromSmellToFragrance.aspx
tomado del ejemplo de Mark:
en este ejemplo, usa el campo de nombre de solo lectura para asegurarse de que la clase invariante sea siempre válida. en este caso, el compositor de la clase quería asegurarse de que el campo de nombre se establezca solo una vez (inmutable) y esté siempre presente.
fuente
Los métodos sugieren que algo tiene que suceder para devolver el valor, las propiedades sugieren que el valor ya está allí. Esta es una regla general, a veces es posible que desee una propiedad que haga un poco de trabajo (es decir
Count
), pero generalmente es una forma útil de decidir.fuente