Код: Выделить всё
public class MyClass
{
public readonly List Value { get; } = []; // Error: Property cannot be 'readonly'
}
public record MyRecord
{
public readonly string Name { get; init; } // Error: Property cannot be 'readonly'
}
public struct MyStruct
{
public readonly string Name { get; init; } // OK
}
Есть и другие сообщения, отвечающие на вопрос, почему только чтение не поддерживается. Не разрешено со свойствами (в классах и записях), но мне хотелось бы знать, почему это разрешено со структурами. Имеет ли это какое-то отношение к тому, что структуры являются типами значений?
EDIT: Этот вопрос частично рассматривается в разделе «Почему C# 8.0 разрешает элементы только для чтения в структуре, но не в классе?», в котором основное внимание уделяется на влияние методов структуры, доступных только для чтения. Кажется, это не объясняет напрямую причину наличия свойств только для чтения.
Я обнаружил, что свойства только для чтения преобразуются в обычные свойства, поддерживаемые полем только для чтения в низкоуровневом коде, генерируемом компилятором. Я не уверен, что это единственное отличие, и остается вопрос, почему это нельзя применить к классам и записям (поскольку свойство + обратное поле только для чтения можно вручную сделать в классах).
Подробнее здесь: https://stackoverflow.com/questions/793 ... in-structs
Мобильная версия