За последние несколько дней было несколько вопросов о правильном использовании null ; вот три (один мой):
При чтении и размышлении над этой проблемой у меня возникла мысль: почему бы не использовать struct
вместо class
? (Затем я прочитал несколько вопросов об этом.)
Одно большое преимущество struct
(в данном контексте) состоит в том, что не может быть нулевым , поэтому нет необходимости проверять null
. И в качестве дополнительного бонуса, если вы действительно хотите ноль struct
, вы можете сделать это тоже с некоторым дополнительным синтаксисом (T?
) и типом Nullable<>
. (Слишком плохие ссылочные типы тоже не сработали!)
Но struct
s передаются по значению, которое убивает производительность. Ну, во-первых, код должен быть «правильным» (что бы это ни значило ), а затем быстро. Однако есть несколько способов избежать этих накладных расходов, где это действительно важно: ref
параметры, обнуляемые параметры, поместите struct
в некоторый другой класс, скажем List<>
.
Правда, с struct
s вы не можете создать иерархию классов, но «наследование перерасходуется». И вы можете реализовать интерфейсы.
Использование большего количества объектов на основе struct
может упростить написание многопоточного кода.
Существуют ли еще более редко упоминаемые преимущества для struct
с? Приходят ли какие-либо из этих соображений приблизиться к появлению вмятины в "огромном" старте "class
?