Свойства только для получателя могут быть инициализированы через инициализатор
public int MyReadOnlyProp { get; } = 100;
или в конструкторе
public MyClass()
{
MyReadOnlyProp = 100;
}
, но не могут быть изменены впоследствии.Как вы сказали: они доступны только для чтения.
Альтернативой являются автоматически реализуемые свойства с закрытым или защищенным установщиком, позволяющие в любое время изменить значение в классе (или структуре),но не снаружи.Это делает их доступными только для чтения извне.
public int MyReadOnlyProp { get; private set; }
И, конечно, есть старые добрые явно реализованные свойства
private int _myReadOnlyProp;
public int MyReadOnlyProp { get { return _myReadOnlyProp; } }
или с новым синтаксисом тела выражения
private int _myReadOnlyProp;
public int MyReadOnlyProp => _myReadOnlyProp;