Dalam aplikasi .NET, kapan saya harus menggunakan properti "ReadOnly" dan kapan saya harus menggunakan "Get" saja. Apa perbedaan antara keduanya.
private readonly double Fuel= 0;
public double FuelConsumption
{
get
{
return Fuel;
}
}
atau
private double Fuel= 0;
public double FuelConsumption
{
get
{
return Fuel;
}
}
public double FuelConsumption => Fuel;
Jawaban:
Membuat properti hanya dengan getter membuat properti Anda menjadi hanya-baca untuk kode apa pun yang ada di luar kelas.
Namun Anda dapat mengubah nilai menggunakan metode yang disediakan oleh kelas Anda:
Menyetel bidang privat kelas
readonly
Anda memungkinkan Anda menyetel nilai bidang hanya sekali (menggunakan tugas sebaris atau di konstruktor kelas). Anda tidak akan dapat mengubahnya nanti.readonly
bidang kelas sering digunakan untuk variabel yang diinisialisasi selama konstruksi kelas, dan tidak akan pernah diubah nanti.Singkatnya, jika Anda perlu memastikan nilai properti Anda tidak akan pernah berubah dari luar, tetapi Anda harus bisa mengubahnya dari dalam kode kelas Anda, gunakan properti "Get-only".
Jika Anda perlu menyimpan nilai yang tidak akan pernah berubah setelah nilai awalnya ditetapkan, gunakan
readonly
bidang.sumber
Mulai C # 6 Anda bisa mendeklarasikan dan menginisialisasi 'read-only auto-property' dalam satu baris:
Anda dapat menyetel nilai dari konstruktor tetapi tidak dari metode lain.
sumber
Properti yang hanya memiliki pengambil dikatakan hanya untuk dibaca. Penyebab tidak ada penyetel disediakan, untuk mengubah nilai properti (dari luar).
C # memiliki kata kunci readonly , yang dapat digunakan pada field (bukan properti). Bidang yang ditandai sebagai "hanya baca", hanya dapat disetel sekali selama konstruksi objek (dalam konstruktor).
sumber
properti readonly digunakan untuk membuat kode gagal-aman. Saya sangat suka seri posting Enkapsulasi Mark Seemann tentang properti dan bidang dukungan:
http://blog.ploeh.dk/2011/05/24/PokayokeDesignFromSmellToFragrance.aspx
diambil dari contoh Mark:
dalam contoh ini, Anda menggunakan kolom nama hanya baca untuk memastikan invarian kelas selalu valid. dalam hal ini komposer kelas ingin memastikan field name disetel hanya sekali (tidak dapat diubah) dan selalu ada.
sumber
Metode menyarankan sesuatu harus terjadi untuk mengembalikan nilai, properti menyarankan bahwa nilai sudah ada. Ini adalah aturan praktis, terkadang Anda mungkin menginginkan properti yang berfungsi sedikit (mis.
Count
), Tetapi umumnya ini adalah cara yang berguna untuk memutuskan.sumber