Ya, keduanya hanya baca, tetapi ada perbedaan. Di yang pertama, ada bidang dukungan yang diinisialisasi ke 0 sebelum konstruktor dijalankan. Anda dapat mengubah nilai hanya di konstruktor , seperti bidang baca-saja biasa. The getter itu sendiri hanya mengembalikan nilai field.
Pada yang kedua, pengambil hanya mengembalikan 0 setiap kali, tanpa bidang yang terlibat.
Jadi untuk menghindari penggunaan properti yang diimplementasikan secara otomatis atau anggota yang bertubuh ekspresi sama sekali, kami memiliki:
Versi pertama
private readonly int _number = 0;
public int Number { get { return _number; } }
Versi kedua
public int Number { get { return 0; } }
Contoh perbedaan yang lebih jelas mungkin terlihat seperti ini:
public DateTime CreationTime { get; } = DateTime.UtcNow;
public DateTime CurrentTime => DateTime.UtcNow;
Jika Anda membuat objek tunggal, CreationTime
propertinya akan selalu memberikan hasil yang sama - karena disimpan dalam bidang hanya baca, diinisialisasi pada konstruksi objek. Namun, setiap kali Anda mengakses CurrentTime
properti, itu akan menyebabkan DateTime.UtcNow
dievaluasi, sehingga Anda akan mendapatkan hasil yang berpotensi berbeda.
random.NextInt()
. Versi pertama akan mengevaluasi itu sekali dan selalu memiliki nilai yang sama. Yang kedua akan mengembalikan nilai baru setiap kali.