Почему в C# только чтение применимо только к свойствам в структурах? [дубликат]C#

Место общения программистов C#
Ответить
Anonymous
 Почему в C# только чтение применимо только к свойствам в структурах? [дубликат]

Сообщение Anonymous »

Код: Выделить всё

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
}
Как показано в коде, к свойству нельзя применить только чтение, независимо от того, какой модификатор доступа равен { get; набор; , {получить; или { get; инициализировать; . Однако при выполнении того же действия со свойством в структуре ошибок не возникает (хотя я понимаю, что это избыточно).
Есть и другие сообщения, отвечающие на вопрос, почему только чтение не поддерживается. Не разрешено со свойствами (в классах и записях), но мне хотелось бы знать, почему это разрешено со структурами. Имеет ли это какое-то отношение к тому, что структуры являются типами значений?
EDIT: Этот вопрос частично рассматривается в разделе «Почему C# 8.0 разрешает элементы только для чтения в структуре, но не в классе?», в котором основное внимание уделяется на влияние методов структуры, доступных только для чтения. Кажется, это не объясняет напрямую причину наличия свойств только для чтения.
Я обнаружил, что свойства только для чтения преобразуются в обычные свойства, поддерживаемые полем только для чтения в низкоуровневом коде, генерируемом компилятором. Я не уверен, что это единственное отличие, и остается вопрос, почему это нельзя применить к классам и записям (поскольку свойство + обратное поле только для чтения можно вручную сделать в классах).

Подробнее здесь: https://stackoverflow.com/questions/793 ... in-structs
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»