Ссылка только для чтения с типом класса

Я пытаюсь создать свойство только для чтения (функция C# 7.2).

public class JobStatus
{
    public int Id { get; set; }
}

public class Job
{
    public ref readonly JobStatus Status => ref _jobStatus;
    private readonly JobStatus _jobStatus = new JobStatus
    {
        Id = 4
    };
}

class Program
{
    static void Main(string[] args)
    {
        var job = new Job();
        job.Status.Id = 5;
    }
}

Этот код успешно компилируется. Я ожидаю какую-то ошибку, что я пытаюсь обновить поле свойства только для чтения. Я неправильно использую функцию возврата только для чтения?

1 ответ

Решение

Из того, что я нашел в этой статье, вы должны понимать это как следующее

Пометка параметра как "только для чтения" или "in" не делает значение, на которое он ссылается, неизменным. Хотя функция, объявляющая параметр, не может вносить в него изменения, значение можно изменить в другом месте. Это не требует многопоточности, просто способ доступа к исходной переменной, на которую ссылается параметр.

Так как ваш класс не является неизменным, его можно изменить в другом месте. Эта функция в основном связана с производительностью при передаче эталонного значения

Другие вопросы по тегам