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

时间:2010-06-13 19:20:11

标签: c# .net 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...;
    }
}

I asked for something to review my code,有人提出了这种方法。我的问题是为什么IHtmlDownloader变量只读?

3 个答案:

答案 0 :(得分:42)

如果它是私有的readonly,那么好处是你不能在初始化之后无意中将它从该类的另一部分更改。 readonly修饰符确保字段只能在初始化期间或其类构造函数中赋值。

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

答案 1 :(得分:5)

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

答案 2 :(得分:1)

只读字段对于建模初始化后不应更改的数据非常有用。您可以在声明它时或在构造函数中使用初始化程序为readonly字段赋值,但此后您无法更改它。