Причина, по которой компилятор C # требует, чтобы вы связались с конструктором по умолчанию (т. Е. Добавляете : this()
к вашему объявлению конструктора) при использовании автоматически реализуемых свойств, заключается в том, что все переменные должны быть назначены до выхода из конструктора . Теперь автоматически внедряемые свойства портят это из-за того, что они не позволяют вам напрямую обращаться к переменным, которые поддерживают свойства . Метод, который компилятор использует, чтобы обойти это, состоит в том, чтобы автоматически назначать все переменные их значениям по умолчанию, и чтобы это гарантировать, вы должны связать конструктор по умолчанию. Это не очень умный метод, но он выполняет свою работу достаточно хорошо.
Так что, действительно, это будет означать, что некоторые переменные будут инициализированы дважды. Тем не менее, я не думаю, что это будет большой проблемой производительности. Я был бы очень удивлен, если бы компилятор (или, по крайней мере, JIT) не просто удалил первый оператор инициализации для любой переменной, которая была дважды установлена в вашем конструкторе. Быстрый тест должен подтвердить это для вас, хотя я совершенно уверен, что вы получите ожидаемые результаты. (Если вы случайно этого не сделаете, и вам абсолютно необходимо небольшое повышение производительности, которое позволяет избежать дублирования предложений инициализации, вы можете просто определить свои свойства обычным способом, то есть с помощью вспомогательных переменных.)
Если честно, мой совет - даже не беспокоиться о автоматически внедряемых свойствах в структурах. Вполне приемлемо просто использовать вместо них публичные переменные, и они предлагают не меньшую функциональность, чем автоматически реализуемые свойства. Разумеется, классы - это другая ситуация, но я действительно без колебаний использую публичные переменные в структурах. (Любые сложные свойства могут быть определены нормально, если они вам нужны.)
Надеюсь, это поможет.