Criar uma propriedade com apenas um getter torna sua propriedade somente leitura para qualquer código que esteja fora da classe.
No entanto, você pode alterar o valor usando métodos fornecidos por sua classe:
public class FuelConsumption {
private double fuel;
public double Fuel
{
get { return this.fuel; }
}
public void FillFuelTank(double amount)
{
this.fuel += amount;
}
}
public static void Main()
{
FuelConsumption f = new FuelConsumption();
double a;
a = f.Fuel; // Will work
f.Fuel = a; // Does not compile
f.FillFuelTank(10); // Value is changed from the method's code
}
Definir o campo privado de sua classe como readonlypermite que você defina o valor do campo apenas uma vez (usando uma atribuição embutida ou no construtor de classe). Você não poderá alterá-lo mais tarde.
public class ReadOnlyFields {
private readonly double a = 2.0;
private readonly double b;
public ReadOnlyFields()
{
this.b = 4.0;
}
}
readonly Os campos de classe são freqüentemente usados para variáveis que são inicializadas durante a construção da classe e nunca serão alteradas posteriormente.
Resumindo, se você precisa garantir que o valor de sua propriedade nunca seja alterado externamente, mas precisa ser capaz de alterá-lo de dentro do código da classe, use uma propriedade "Get-only".
Se você precisar armazenar um valor que nunca mudará depois que seu valor inicial for definido, use um readonlycampo.
public double FuelConsumption => Fuel;