在以下代码中:
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...;
}
}
I asked for something to review my code,有人提出了这种方法。我的问题是为什么IHtmlDownloader变量只读?
答案 0 :(得分:42)
如果它是私有的readonly
,那么好处是你不能在初始化之后无意中将它从该类的另一部分更改。 readonly
修饰符确保字段只能在初始化期间或其类构造函数中赋值。
如果在初始化后功能上不应该改变某些东西,那么使用可用的语言结构强制执行该功能总是好的做法。
答案 1 :(得分:5)
这可确保在执行构造函数后不会更改_downloader
的值。标记为readonly
的字段只能从类的构造函数中赋值。
答案 2 :(得分:1)
只读字段对于建模初始化后不应更改的数据非常有用。您可以在声明它时或在构造函数中使用初始化程序为readonly字段赋值,但此后您无法更改它。