170 похожих чатов

Я тут задумал сделать автоматичекую проверку сборки на иммутабельность классов

и структур (это нужно для 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) - Маркирует метод, как заведомо не изменяющий внутреннее состояние объекта

Может, кто еще чего добавит?

2 ответов

10 просмотров

Зачем, когда есть F#?

Это какая-то курсовая или дипломный?

Похожие вопросы

Обсуждают сегодня

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Чтобы перехватить все нажимания буков на форме, надо хук ставить? Пробовал на форме ОнКейДаун, оно ловит клаву если фокус не на компоненте с вводом текста
Serjone
15
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Всем привет! вывожу на общей стр дочерние ресурсыв каждом ресурсе галерея, и первая фотка должна выводиться на общей [!DocLister? &prepare=photo !]
Alekso
12
А можно вопрос? Мне сегодня сказали что у меня функция (которая просто заполняет массив значениями) не правильная void Full(double * arr, int n) { for (int i = 0; i < n; i...
† C E †
7
День добрый, подскажите пожалуйста, есть ли какой-то способ сказать ребару не компилировать определённое приложение? Всю доку их перечиатл ничего подобного не нашёл
Кирилл
14
Добрый вечер. Хочу чтобы у меня в классе поле было функцией, которая возвращает строку. Делаю так: interface ... TGetOutPath = function : String of object; ... protec...
Kirill Filippenok
12
Народ! Впервые клиенту пришло письмо от РКН, у вас, дескать, есть яндекс метрика, а нигде не написано, что вы ее юзаете. Никто не сталкивался?
Sasha Beep
10
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Здравствуйте, хочу сделать HelloWorld в консоли Дельфи, но функция API ничего не выводит, что я делаю не так? program Hello; {$APPTYPE CONSOLE} uses System.SysUtils, WinAPI.Wi...
Sergey Vinogradov
20
Карта сайта