Tạo thuộc tính chỉ với getter làm cho thuộc tính của bạn ở chế độ chỉ đọc cho bất kỳ mã nào nằm ngoài lớp.
Tuy nhiên, bạn có thể thay đổi giá trị bằng các phương thức do lớp của bạn cung cấp:
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
}
Đặt trường riêng tư của lớp bạn như readonly
cho phép bạn đặt giá trị trường chỉ một lần (sử dụng phép gán nội tuyến hoặc trong phương thức khởi tạo lớp). Bạn sẽ không thể thay đổi nó sau này.
public class ReadOnlyFields {
private readonly double a = 2.0;
private readonly double b;
public ReadOnlyFields()
{
this.b = 4.0;
}
}
readonly
trường lớp thường được sử dụng cho các biến được khởi tạo trong quá trình xây dựng lớp và sẽ không bao giờ bị thay đổi sau này.
Tóm lại, nếu bạn cần đảm bảo giá trị thuộc tính của mình sẽ không bao giờ bị thay đổi từ bên ngoài, nhưng bạn cần có thể thay đổi nó từ bên trong mã lớp của mình, hãy sử dụng thuộc tính "Get-only".
Nếu bạn cần lưu trữ một giá trị sẽ không bao giờ thay đổi khi giá trị ban đầu của nó đã được đặt, hãy sử dụng một readonly
trường.
public double FuelConsumption => Fuel;