Почему это поле объявлено как личное, а также только для чтения?
В следующем коде:
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 доступна только для чтения?
Ответы
Ответ 1
Если он частный и readonly
, преимущество в том, что вы не можете непреднамеренно изменить его из другой части этого класса после его инициализации. Модификатор readonly
гарантирует, что поле может быть предоставлено только во время его инициализации или в его конструкторе класса.
Если что-то функционально не должно меняться после инициализации, всегда рекомендуется использовать доступные языковые конструкции для обеспечения этого.
Ответ 2
Это гарантирует, что значение _downloader
не будет изменено после выполнения конструктора. Поля, отмеченные как readonly
, могут быть назначены только значениям внутри конструктора (ов) класса.