Рассмотрим следующую структуру в C#:Отсутствие ошибок компиляции при работе с структура и свойства
public struct TestStruct
{
public int Number { get; set; }
public TestStruct(int num)
{
Number = num;
}
}
Я очень хорошо знаком с ошибкой компиляции, которая возникает, если один пытается собрать это (this и that вопросы обеспечения пример).
Однако, я недавно заметил, что такая структура составлена отлично в Visual Studio 2015.
Я не смог найти какой-либо журнал изменений для компилятора, который будет включать в себя вышеупомянутое поведение. Может ли кто-нибудь дать какие-либо указания относительно того, где найти такую информацию? Я нашел упоминания о чем-то подобном here.
Кроме того, страница об ошибке компилятора CS0188 состояние:
Auto-реализованных свойств следует избегать структур, потому что они не имеют поля подложки и, следовательно, не могут быть инициализированы в любом случае из конструктора.
Однако я не смог заметить невозможность инициализировать свойство из конструктора.
Я забыл упомянуть, что я попытался установить различные языковые версии для проекта, и она прекрасно работает даже с C# 4. Например вы предоставили Безразлично работайте с C# 4, как и ожидалось. Мне кажется, что это проблема компилятора, а не язык. Во всяком случае, это кажется логичным, но я не понимаю, почему это нигде не упоминалось и не было представлено в разделе, посвященном инициализации свойств для C# 6. –
@ vlad.stryapko Изменение языковой версии не совсем так, как вы думаете оно делает. Установка разных версий компилятора изменяет только тот синтаксис, который примет компилятор. Он не меняет способ работы компилятора. См. [Этот вопрос] (http://stackoverflow.com/questions/29476057/how-to-compile-c-sharp-with-specific-language-version). – Kyle
Итак, правильно ли я понял, что для поддержки свойств только для чтения в C# 6 изменения были внесены в компилятор, который заставлял его работать по-другому и напрямую устанавливал поле, поэтому не поднимал ошибку? –