การสร้างคุณสมบัติที่มีเพียง getter ทำให้คุณสมบัติของคุณเป็นแบบอ่านอย่างเดียวสำหรับโค้ดใด ๆ ที่อยู่นอกคลาส
อย่างไรก็ตามคุณสามารถเปลี่ยนค่าโดยใช้วิธีการที่จัดเตรียมโดยชั้นเรียนของคุณ:
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
}
การตั้งค่าฟิลด์ส่วนตัวของชั้นเรียนของคุณตามที่readonlyอนุญาตให้คุณกำหนดค่าฟิลด์เพียงครั้งเดียว (โดยใช้การกำหนดแบบอินไลน์หรือในตัวสร้างคลาส) คุณจะไม่สามารถเปลี่ยนแปลงได้ในภายหลัง
public class ReadOnlyFields {
private readonly double a = 2.0;
private readonly double b;
public ReadOnlyFields()
{
this.b = 4.0;
}
}
readonly ฟิลด์คลาสมักใช้สำหรับตัวแปรที่เริ่มต้นในระหว่างการสร้างคลาสและจะไม่มีการเปลี่ยนแปลงในภายหลัง
กล่าวโดยย่อคือหากคุณต้องการให้แน่ใจว่ามูลค่าทรัพย์สินของคุณจะไม่มีการเปลี่ยนแปลงจากภายนอกแต่คุณต้องสามารถเปลี่ยนจากภายในรหัสชั้นเรียนของคุณให้ใช้คุณสมบัติ "รับอย่างเดียว"
หากคุณต้องการจัดเก็บค่าที่จะไม่เปลี่ยนแปลงเมื่อตั้งค่าเริ่มต้นแล้วให้ใช้readonlyฟิลด์
public double FuelConsumption => Fuel;