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.Satu perbedaan adalah ketika hal
0
itu dievaluasi: pada saat pembuatan objek atau ketika properti digunakan.Anda dapat melihat ini lebih baik dengan properti DateTime:
The
Start
properti terus kembali waktu yang sama (dari ketika misalnya diciptakan), sedangkanNow
perubahan untuk mencerminkan waktu saat ini.Penjelasan :
Versi pertama ("Mulai") memasok nilai awal yang bahkan mungkin ditimpa oleh konstruktor. Jadi ini dievaluasi sekali saja.
Versi kedua ("Sekarang") memberikan ekspresi yang akan menjadi "pengambil" properti ini. Jadi ini dievaluasi setiap kali properti dibaca. Bahkan tidak ada bidang dukungan yang dapat ditimpa oleh konstruktor.
sumber
Ini adalah fitur bahasa C # 6.
Contoh pertama
Contoh pertama adalah properti otomatis pengambil-saja . Bidang dukungan properti pengambil otomatis saja secara implisit dinyatakan sebagai hanya dapat dibaca.
Contoh kedua
Dan contoh kedua adalah ekspresi tubuh pada anggota fungsi seperti properti . Perhatikan bahwa tidak ada
get
kata kunci: Ini tersirat oleh penggunaan sintaksis ekspresi tubuh.Keduanya hanya bisa dibaca.
sumber