Pracuję nad stworzeniem niezmiennej klasy.
Oznaczyłem wszystkie właściwości jako tylko do odczytu.
Mam listę przedmiotów w klasie.
Chociaż jeśli właściwość jest tylko do odczytu, lista może być modyfikowana.
Ujawnienie IEnumerable listy sprawia, że jest ona niezmienna.
Chciałem wiedzieć, jakie są podstawowe zasady, których należy przestrzegać, aby klasa była niezmienna?
c#
.net
immutability
Biswanath
źródło
źródło
atomicity
,volatility
orazimmutability
: część pierwsza , część druga , a Part Three . Pochodzą one z jego osobistego bloga i, jak sądzę, są bardziej przyjazne dla początkujących niż jego posty w witrynie MSDN.Odpowiedzi:
Myślę, że jesteś na dobrej drodze -
źródło
Aby były niezmienne, wszystkie właściwości i pola powinny być tylko do odczytu. A pozycje na każdej liście powinny same być niezmienne.
Możesz utworzyć właściwość listy tylko do odczytu w następujący sposób:
źródło
basic rules to make a class (that contains a list) immutable
. Semantyka ImmutableList umożliwia wydajniejsze wykorzystanie pamięci podczas dodawania elementów do kopii listy, ale wydaje mi się, że jest to bardziej szczegółowy przypadek użycia.Pamiętaj też, że:
nie jest niezmienna, nawet jeśli jest oznaczona słowem kluczowym readonly. Nadal można zmieniać odwołania / wartości do poszczególnych tablic według metody dostępu indeksu.
źródło
Skorzystaj z
ReadOnlyCollection
klasy. Znajduje się wSystem.Collections.ObjectModel
przestrzeni nazw.W przypadku wszystkiego, co zwraca twoją listę (lub w konstruktorze), ustaw listę jako kolekcję tylko do odczytu.
źródło
Inną opcją byłoby użycie wzorca odwiedzających zamiast ujawniania jakichkolwiek wewnętrznych kolekcji.
źródło
Użycie ReadOnlyCollection ograniczy klientowi możliwość jego modyfikowania.
źródło