и структур (это нужно для akka.net и подобных систем).
Вот какие мысли я надумал:
1) Иммутабельными типами считаются:
1. Примитивы
2. Иммутабельные коллекции (ImmutableCollection и т.д.)
3. Иммутабельные классы [имеющие атрибут ImmutableTypeAttribute и проверенные на иммутабельность]
4. Иммутабельные структуры [имещие атрибут ImmutableTypeAttribute и проверенные на иммутабельность]
5. Иммутабельные интерфейсы [имещие атрибут ImmutableTypeAttribute и проверенные на иммутабельность]
6. IActorRef
2) Иммутабельным класс или структура считается, если:
1. Все публичные/внутренние поля и свойства иммутабельного типа
2. Все публичные/внутренние поля - только для чтения
3. Все публичные/внутренние свойства не имеют публичных/внутренних сеттеров
4. Если есть публичные/внутренние методы (в т.ч. статические), то:
4.1 Все поля класса иммутабельного типа и только для чтения
4.2 Все свойства класса иммутабельного типа и не имеют сеттера
4.3 Либо метод имеет атрибут SureNotMutable
5. Если это класс, то его базовый и производные классы также должены быть иммутабельными
6. Все внутренние классы/структуры иммутабельны
3) Иммутабельным интерфейс считается, если он не публичный и все реализующие его типы иммутабельны.
Описание атрибутов:
- IgnoreMutability(string reason) - Маркирует класс, структуру, свойство или поле, как доброкачественно мутабельное (нужно указать причину)
- ImmutableTypeAttribute - Маркирует класс, который после проверки может считаться иммутабельным.
- SureNonMutate(string reason) - Маркирует метод, как заведомо не изменяющий внутреннее состояние объекта
Может, кто еще чего добавит?
Зачем, когда есть F#?
Это какая-то курсовая или дипломный?
Обсуждают сегодня