День двести первый. #BestPractices

Советы по разработке типов

1. Выбор между классом и структурой

Хорошее понимание различий в поведении ссылочных и значимых типов имеет решающее значение при принятии решения в этом вопросе:

- Инициализация и уничтожение значимых типов обычно дешевле.

- Инициализация и уничтожение массивов значимых типов намного дешевле.

- При приведении значимого типа к ссылочному или к интерфейсному типу и обратно выполняется упаковка и распаковка. Это отрицательно влияет на кучу, скорость сборки мусора и общую производительность.

- Ссылочные типы копируются по ссылке, а значимые по значению, т.е. присвоение большого объекта ссылочного типа дешевле, чем значимого.

- Ссылочные типы передаются по ссылке, то есть изменение экземпляра ссылочного типа изменяет все переменные, которые ссылаются на него. Когда же изменяется переменная значимого типа, это не влияет на копии элемента. Поэтому во избежание путаницы структуры делают неизменяемыми.



Большинство типов должны быть классами (ссылочными типами). Однако есть ситуации, когда характеристики значимого типа подойдут для использования структуры (struct).



⚠️ РАССМОТРИТЕ определение объекта как структуры, а не класса, если экземпляры типа небольшие и живут недолго, либо включены в другие объекты.



ИСПОЛЬЗУЙТЕ структуры, когда тип обладает всеми следующими характеристиками:

- Логически представляет из себя единое значение.

- Размер экземпляра типа меньше 16 байт.

- Он неизменяем.

- Его не придётся часто упаковывать.



Продолжение следует…



Источник: https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/