Проблема, которую вы видите, состоит в том, что вы путаете модификатор readonly
с тем, что, по вашему мнению, является свойством только для чтения. Модификатор readonly
гарантирует, что поле может быть назначено только посредством инициализации или конструктора, например, здесь допустимы варианты использования readonly
:
public class MyClass
{
private readonly int age = 27; // Valid, initialisation.
}
public class MyClass
{
private readonly int age;
public MyClass()
{
age = 27; // Valid, construction.
}
}
public class MyClass
{
private readonly int age;
public int Age { get { return age; } set { age = value; } } // Invalid, it's a readonly field.
}
То, что вы находите, это то, что ваш класс Person
является изменяемым, это означает, что хотя поле Order.Product
доступно только для чтения, внутренняя структура Person
- нет. С этой целью, если вы хотите создать свойство только для чтения, вы, вероятно, захотите создать свой тип как неизменяемый, поскольку его внутренняя структура / значения не могут измениться.