Подтвердить что ты не робот

Почему это поле объявлено как личное, а также только для чтения?

В следующем коде:

public class MovieRepository : IMovieRepository
{
    private readonly IHtmlDownloader _downloader;

    public MovieRepository(IHtmlDownloader downloader)
    {
        _downloader = downloader;
    }

    public Movie FindMovieById(string id)
    {
        var idUri = ...build URI...;

        var html = _downloader.DownloadHtml(idUri);

        return ...parse ID HTML...;
    }

    public Movie FindMovieByTitle(string title)
    {
        var titleUri = ...build URI...;

        var html = _downloader.DownloadHtml(titleUri);

        return ...parse title HTML...;
    }
}

Я попросил кое-что рассмотреть мой код, и кто-то предложил этот подход. Мой вопрос в том, почему переменная IHtmlDownloader доступна только для чтения?

4b9b3361

Ответ 1

Если он частный и readonly, преимущество в том, что вы не можете непреднамеренно изменить его из другой части этого класса после его инициализации. Модификатор readonly гарантирует, что поле может быть предоставлено только во время его инициализации или в его конструкторе класса.

Если что-то функционально не должно меняться после инициализации, всегда рекомендуется использовать доступные языковые конструкции для обеспечения этого.

Ответ 2

Это гарантирует, что значение _downloader не будет изменено после выполнения конструктора. Поля, отмеченные как readonly, могут быть назначены только значениям внутри конструктора (ов) класса.