Panduan umum untuk C # adalah selalu menggunakan properti di bidang publik. Ini masuk akal - dengan mengekspos bidang, Anda mengekspos banyak detail implementasi. Dengan properti, Anda merangkum detail itu sehingga tersembunyi dari penggunaan kode, dan perubahan implementasi dipisahkan dari perubahan antarmuka.
Namun, saya bertanya-tanya apakah terkadang ada pengecualian yang valid untuk aturan ini ketika berhadapan dengan readonly
kata kunci. Dengan menerapkan kata kunci ini ke bidang publik, Anda membuat jaminan ekstra: imutabilitas. Ini bukan hanya detail implementasi, imutabilitas adalah sesuatu yang mungkin diminati konsumen. Menggunakan readonly
bidang menjadikannya bagian dari kontrak publik, dan sesuatu yang tidak dapat dipatahkan oleh perubahan atau pewarisan masa depan tanpa harus memodifikasi antarmuka publik. Itu sesuatu yang tidak bisa ditawarkan oleh properti.
Jadi, apakah jaminan ketidakmampuan merupakan alasan yang sah untuk memilih readonly
bidang daripada properti dalam beberapa kasus?
(Untuk klarifikasi, saya tentu tidak mengatakan Anda harus selalu membuat pilihan ini hanya karena lapangan terjadi menjadi berubah saat ini, hanya ketika masuk akal sebagai bagian dari desain kelas dan itu penggunaan dimaksudkan untuk mencakup kekekalan dalam kontrak. Saya sebagian besar tertarik pada jawaban yang fokus pada apakah ini dapat dibenarkan, daripada kasus-kasus tertentu di mana tidak, seperti ketika Anda membutuhkan anggota untuk berada di interface
, atau ingin melakukan pemuatan malas.)