Я фокусируюсь на создании предметов неизменных. Неизменяемые объекты позволяют намного проще рассуждать о многопоточном коде, чем объекты, ориентированные на многопоточность. Объект имеет одно видимое состояние, которое может передаваться между потоками без какой-либо синхронизации. Это берет мысль многопоточного программирования.
Если вам интересно, я опубликовал много своих работ с неизменяемыми объектами, в частности неизменяемые коллекции в галерее кода. Название проекта: RantPack . В области сбора у меня есть
- ImmutableCollection
- ImmutableMap
- ImmutableAvlTree
- ImmutableLinkedList
- ImmutableArray
- ImmutableStack
- ImmutableQueue
Существует дополнительный слой подкладки (CollectionUtility), который будет создавать объекты-оболочки, реализующие интерфейсы BCL, такие как IList и ICollection . Они не могут полностью реализовать интерфейсы, поскольку они неизменны, но реализованы все возможные методы.
Исходный код (C #), включая модульное тестирование, также доступен на сайте.