为什么这个字段被声明为私有而且只是readonly?

Ser*_*pia 29 .net c# interface readonly

在以下代码中:

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...;
    }
}
Run Code Online (Sandbox Code Playgroud)

我要求审查我的代码,有人提出了这种方法.我的问题是为什么IHtmlDownloader变量只读?

Eri*_* J. 46

如果它是私有的readonly,那么好处是你不能在初始化之后无意中将它从该类的另一部分更改.所述readonly改性剂可以确保字段只能在其初始化过程中或在其类构造函数被给出的值.

如果在初始化之后功能上不应该改变某些东西,那么使用可用的语言结构强制执行它总是很好的做法.

  • 答对了.如果它是只读的,它只能通过对象初始化或在构造函数中设置.这没有必要,但代码质量的一部分限制了错误发生的范围. (2认同)
  • 还有一个额外的好处是编译器和JITter可以影响某些优化,知道在构造之后将修复该值. (2认同)

M4N*_*M4N 5

这可确保_downloader在执行构造函数后不会更改值.标记为的字段readonly只能从类的构造函数中赋值.