Saya sedang membuat kelas yang tidak bisa diubah.
Saya telah menandai semua properti sebagai hanya-baca.
Saya memiliki daftar item di kelas.
Meskipun jika properti adalah read-only, daftar dapat diubah.
Mengekspos IE yang tak terhitung banyaknya dari daftar membuatnya tidak bisa diubah.
Saya ingin tahu apa aturan dasar yang harus diikuti untuk membuat kelas tidak berubah?
c#
.net
immutability
Biswanath
sumber
sumber
atomicity
,volatility
, danimmutability
: Bagian Satu , Bagian Kedua , dan Bagian Ketiga . Ini dari blog pribadinya dan, saya yakin, lebih ramah pemula daripada posting MSDN miliknya.Jawaban:
Saya pikir Anda berada di jalur yang benar -
sumber
Agar tidak dapat diubah, semua properti dan bidang Anda harus hanya-baca. Dan item dalam daftar mana pun harus tidak dapat diubah.
Anda dapat membuat properti daftar hanya-baca sebagai berikut:
sumber
basic rules to make a class (that contains a list) immutable
. Semantik ImmutableList memungkinkan penggunaan memori yang lebih efisien saat menambahkan item ke salinan daftar, tetapi menurut saya itu adalah kasus penggunaan yang lebih spesifik.Selain itu, perlu diingat bahwa:
tidak dapat diubah meskipun ditandai dengan kata kunci hanya baca. Anda masih dapat mengubah referensi / nilai array individu dengan pengakses indeks.
sumber
Gunakan
ReadOnlyCollection
kelas. Itu terletak diSystem.Collections.ObjectModel
namespace.Pada apa pun yang mengembalikan daftar Anda (atau dalam konstruktor), setel daftar sebagai koleksi hanya-baca.
sumber
Pilihan lainnya adalah menggunakan pola pengunjung daripada mengekspos koleksi internal sama sekali.
sumber
Menggunakan ReadOnlyCollection akan membatasi klien untuk mengubahnya.
sumber